Permalink
Browse files

Hatched BEXML out into its own GIT repo

  • Loading branch information...
1 parent 7e5463d commit 2c55019098fe2c76390ed725eb0822f6204ad0d9 Niall Douglas (s [underscore] sourceforge {at} nedprod [dot] com) committed Mar 8, 2012
Showing with 0 additions and 16,720 deletions.
  1. +0 −55 BEXML/BEXML.pyproj
  2. +0 −9 BEXML/bexml.xpr
  3. +0 −121 BEXML/bexml.xsd
  4. +0 −241 BEXML/bexmlsrv.py
  5. +0 −485 BEXML/distribute_setup.py
  6. +0 −75 BEXML/ironpython/CompileToStandalone.py
  7. +0 −260 BEXML/ironpython/pyc.py
  8. +0 −8 BEXML/libBEXML/__init__.py
  9. +0 −23 BEXML/libBEXML/bexml.py
  10. +0 −24 BEXML/libBEXML/coerce_datetime.py
  11. +0 −150 BEXML/libBEXML/comment.py
  12. +0 −173 BEXML/libBEXML/issue.py
  13. +0 −51 BEXML/libBEXML/parserbase.py
  14. +0 −6 BEXML/libBEXML/parsers/__init__.py
  15. +0 −220 BEXML/libBEXML/parsers/be_dir.py
  16. +0 −322 BEXML/libBEXML/propertieddictionary.py
  17. +0 −23 BEXML/setup.py
  18. +0 −86 BEXML/tests/TestParseBErepoWithHTTP.py
  19. +0 −60 BEXML/tests/TestParseBErepoWithLib.py
  20. +0 −17 BEXML/tests/__init__.py
  21. +0 −8,999 BEXML/tests/bugs.bugseverywhere.org.xml
  22. +0 −7 ...3a7e/bugs/00f26f04-9202-4288-8744-b29abc2342d6/comments/4be73baf-e46b-4acb-a58e-4719e57c550b/body
  23. +0 −8 ...7e/bugs/00f26f04-9202-4288-8744-b29abc2342d6/comments/4be73baf-e46b-4acb-a58e-4719e57c550b/values
  24. +0 −1 ...3a7e/bugs/00f26f04-9202-4288-8744-b29abc2342d6/comments/d5ed4f87-f1a1-4138-b0ad-190e4a49d820/body
  25. +0 −11 ...7e/bugs/00f26f04-9202-4288-8744-b29abc2342d6/comments/d5ed4f87-f1a1-4138-b0ad-190e4a49d820/values
  26. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/00f26f04-9202-4288-8744-b29abc2342d6/values
  27. +0 −19 ...3a7e/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a/body
  28. +0 −14 ...7e/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/b8e5c376-32a4-42ea-b6b2-adbee069384a/values
  29. +0 −76 ...3a7e/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364/body
  30. +0 −11 ...7e/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/comments/f5139012-e20b-4d24-90a5-10d969ddd364/values
  31. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/01c9a900-61f9-41f7-9b2f-dd8f89e25b1b/values
  32. +0 −8 ...3a7e/bugs/01e7151c-6113-4c8f-9fc5-4d594431bd2b/comments/2f9beed6-4008-442a-8d44-a45cb7ce0a36/body
  33. +0 −8 ...7e/bugs/01e7151c-6113-4c8f-9fc5-4d594431bd2b/comments/2f9beed6-4008-442a-8d44-a45cb7ce0a36/values
  34. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/01e7151c-6113-4c8f-9fc5-4d594431bd2b/values
  35. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/02223264-e28a-4720-9f20-1e7a27a7041d/values
  36. +0 −1 ...3a7e/bugs/04edb940-06dd-4ded-8697-156d54a1d875/comments/e3389187-1e84-43d5-b40b-26f53090edff/body
  37. +0 −8 ...7e/bugs/04edb940-06dd-4ded-8697-156d54a1d875/comments/e3389187-1e84-43d5-b40b-26f53090edff/values
  38. +0 −23 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/04edb940-06dd-4ded-8697-156d54a1d875/values
  39. +0 −1 ...3a7e/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/144c238c-75d1-40f1-82c1-647668bcf2bc/body
  40. +0 −8 ...7e/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/144c238c-75d1-40f1-82c1-647668bcf2bc/values
  41. +0 −1 ...3a7e/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/2bb9163c-a2c4-4301-aff5-385f58a14301/body
  42. +0 −8 ...7e/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/comments/2bb9163c-a2c4-4301-aff5-385f58a14301/values
  43. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/09f84059-fc8e-4954-b24d-a2b33ef21bf4/values
  44. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/0a234f51-2fdf-4001-a04f-b7e02c2fa47b/values
  45. +0 −23 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/0be47243-c172-4de9-b71b-d5dea60f91d5/values
  46. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/0ca2d112-b5bb-4df1-8ac0-e46db6cdd442/values
  47. +0 −33 ...3a7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/16ba77d3-dfc9-4732-8d08-0e471f400d85/body
  48. +0 −8 ...7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/16ba77d3-dfc9-4732-8d08-0e471f400d85/values
  49. +0 −28 ...3a7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/17a2217e-fc1d-4d7a-a569-4fd2a4a2261e/body
  50. +0 −8 ...7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/17a2217e-fc1d-4d7a-a569-4fd2a4a2261e/values
  51. +0 −9 ...3a7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/202e0dc6-61bf-4b17-a8bd-f8a27482cb68/body
  52. +0 −8 ...7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/202e0dc6-61bf-4b17-a8bd-f8a27482cb68/values
  53. +0 −1 ...3a7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/6a0080c4-d684-4c2c-afaa-c15cc43d68ad/body
  54. +0 −8 ...7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/6a0080c4-d684-4c2c-afaa-c15cc43d68ad/values
  55. +0 −22 ...3a7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/7e733393-8ba0-4345-a0e3-4140101d32f0/body
  56. +0 −8 ...7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/comments/7e733393-8ba0-4345-a0e3-4140101d32f0/values
  57. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/0cad2ac6-76ef-4a88-abdf-b2e02de76f5c/values
  58. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/0e0c806c-5443-4839-aa60-9615c8c10853/values
  59. +0 −14 ...3a7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/3646e056-a2df-46e5-b877-88608c7cc5af/body
  60. +0 −11 ...7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/3646e056-a2df-46e5-b877-88608c7cc5af/values
  61. +0 −13 ...3a7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/7812d2e5-9d4b-4621-b071-22e91e8757d2/body
  62. +0 −11 ...7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/7812d2e5-9d4b-4621-b071-22e91e8757d2/values
  63. +0 −29 ...3a7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/bb406a33-92b6-46dd-950c-c7cfb5440e7b/body
  64. +0 −8 ...7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/bb406a33-92b6-46dd-950c-c7cfb5440e7b/values
  65. +0 −44 ...3a7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/bd1207ef-f97e-4078-8c5d-046072012082/body
  66. +0 −11 ...7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/comments/bd1207ef-f97e-4078-8c5d-046072012082/values
  67. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/1100c966-9671-4bc6-8b68-6d408a910da1/values
  68. +0 −25 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/0f60a148-7024-44bd-bbed-377cbece9d1b/body
  69. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/0f60a148-7024-44bd-bbed-377cbece9d1b/values
  70. +0 −28 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/13012b22-2d02-444c-87c0-8cf0f17137ae/body
  71. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/13012b22-2d02-444c-87c0-8cf0f17137ae/values
  72. +0 −25 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/1f9f60de-ba37-42bc-a1c0-dc062ef255e1/body
  73. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/1f9f60de-ba37-42bc-a1c0-dc062ef255e1/values
  74. +0 −93 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/30a8b841-98ae-41b7-9ef2-6af7cffca8da/body
  75. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/30a8b841-98ae-41b7-9ef2-6af7cffca8da/values
  76. +0 −32 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/46937fd4-b0bc-4eed-8033-d699445441ea/body
  77. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/46937fd4-b0bc-4eed-8033-d699445441ea/values
  78. +0 −73 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/4d192c6c-a4a8-4844-b083-2dd5926bd2d9/body
  79. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/4d192c6c-a4a8-4844-b083-2dd5926bd2d9/values
  80. +0 −76 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/624a4542-92e9-442e-b71c-a14da4fe55cf/body
  81. +0 −8 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/624a4542-92e9-442e-b71c-a14da4fe55cf/values
  82. +0 −70 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/6dcc910a-ce15-4eeb-b49b-4747719748ed/body
  83. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/6dcc910a-ce15-4eeb-b49b-4747719748ed/values
  84. +0 −15 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7/body
  85. +0 −11 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7/values
  86. +0 −95 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/8ffc90d7-0be7-4b00-88e6-9ae1b65f7957/body
  87. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/8ffc90d7-0be7-4b00-88e6-9ae1b65f7957/values
  88. +0 −87 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/bd98f525-95ec-446a-84e8-34c7d6fa5b40/body
  89. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/bd98f525-95ec-446a-84e8-34c7d6fa5b40/values
  90. +0 −37 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/c8283e08-967c-4a7b-b953-3ec62c83fb9f/body
  91. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/c8283e08-967c-4a7b-b953-3ec62c83fb9f/values
  92. +0 −33 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/d86e497d-667d-4c2b-9249-76026df56633/body
  93. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/d86e497d-667d-4c2b-9249-76026df56633/values
  94. +0 −27 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/dc32aa62-cf56-4171-84a1-8f7d02b23b6d/body
  95. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/dc32aa62-cf56-4171-84a1-8f7d02b23b6d/values
  96. +0 −22 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/e520239c-8d69-4ff6-b1bd-0c2f74366200/body
  97. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/e520239c-8d69-4ff6-b1bd-0c2f74366200/values
  98. +0 −26 ...3a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/fd6162f3-7fc1-41d1-a073-a07465802b72/body
  99. +0 −14 ...7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/comments/fd6162f3-7fc1-41d1-a073-a07465802b72/values
  100. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/12c986be-d19a-4b8b-b1b5-68248ff4d331/values
  101. +0 −1 ...3a7e/bugs/15aef818-6a62-41be-905d-6b92edc405bf/comments/e553c1fd-a3e5-46b1-807c-0ef2efbb7fe2/body
  102. +0 −8 ...7e/bugs/15aef818-6a62-41be-905d-6b92edc405bf/comments/e553c1fd-a3e5-46b1-807c-0ef2efbb7fe2/values
  103. +0 −18 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/15aef818-6a62-41be-905d-6b92edc405bf/values
  104. +0 −21 ...3a7e/bugs/16989098-aa1d-4a08-bff9-80446b4a82c5/comments/85770405-0ead-4044-a3cf-082615ff1b6f/body
  105. +0 −8 ...7e/bugs/16989098-aa1d-4a08-bff9-80446b4a82c5/comments/85770405-0ead-4044-a3cf-082615ff1b6f/values
  106. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/16989098-aa1d-4a08-bff9-80446b4a82c5/values
  107. +0 −5 ...3a7e/bugs/16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb/comments/489397bd-b987-4a08-9589-c5b71661ebb7/body
  108. +0 −8 ...7e/bugs/16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb/comments/489397bd-b987-4a08-9589-c5b71661ebb7/values
  109. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/16fc9496-cdc2-4c6e-9b9f-b8f483b6dedb/values
  110. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/171819aa-c092-4ddf-ace3-797635fa2572/values
  111. +0 −1 ...3a7e/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/comments/c531727a-9d0f-486f-aa0e-d4d2f2236640/body
  112. +0 −8 ...7e/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/comments/c531727a-9d0f-486f-aa0e-d4d2f2236640/values
  113. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/17921fbc-e7f0-4f31-8cdd-598e5ba7237b/values
  114. +0 −7 ...3a7e/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/comments/5bcce533-03bb-4b3a-ab77-92d32a7aa054/body
  115. +0 −8 ...7e/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/comments/5bcce533-03bb-4b3a-ab77-92d32a7aa054/values
  116. +0 −13 ...3a7e/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/comments/9e75984a-fc76-46ec-a1f3-ac80014b0c41/body
  117. +0 −8 ...7e/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/comments/9e75984a-fc76-46ec-a1f3-ac80014b0c41/values
  118. +0 −21 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/206d9b07-6e30-4c8b-9594-ee98e3c646e7/values
  119. +0 −2 ...3a7e/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/comments/b8bbd433-9017-4c04-a038-2a7370a3adc7/body
  120. +0 −8 ...7e/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/comments/b8bbd433-9017-4c04-a038-2a7370a3adc7/values
  121. +0 −1 ...3a7e/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/comments/e5db7c9b-de48-4302-905b-9570bb6e7ade/body
  122. +0 −8 ...7e/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/comments/e5db7c9b-de48-4302-905b-9570bb6e7ade/values
  123. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/2103f60c-36e5-4b05-b57c-8c6fee2d80d4/values
  124. +0 −56 ...3a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/4012c6cc-1300-4f6b-af0e-9176eedf8de7/body
  125. +0 −11 ...7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/4012c6cc-1300-4f6b-af0e-9176eedf8de7/values
  126. +0 −47 ...3a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/4952e1c7-e035-42f1-882b-6b5264481d0a/body
  127. +0 −14 ...7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/4952e1c7-e035-42f1-882b-6b5264481d0a/values
  128. +0 −8 ...3a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/64424f05-b42b-4835-8afd-8495ae61345d/body
  129. +0 −11 ...7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/64424f05-b42b-4835-8afd-8495ae61345d/values
  130. +0 −26 ...3a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/6555a651-5a7f-4a8a-9793-47ad1315e9e8/body
  131. +0 −14 ...7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/6555a651-5a7f-4a8a-9793-47ad1315e9e8/values
  132. +0 −20 ...3a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/7750d77c-85d2-4810-9d41-cec62b0da885/body
  133. +0 −14 ...7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/7750d77c-85d2-4810-9d41-cec62b0da885/values
  134. +0 −19 ...3a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/777182da-a216-45c7-bf4d-42c84e511c66/body
  135. +0 −14 ...7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/777182da-a216-45c7-bf4d-42c84e511c66/values
  136. +0 −37 ...3a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/9bbe9370-99c7-4d7c-80ee-9ade6b6feb9f/body
  137. +0 −14 ...7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/9bbe9370-99c7-4d7c-80ee-9ade6b6feb9f/values
  138. +0 −20 ...3a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/b9865d8b-46ae-4169-bc83-d75a98164729/body
  139. +0 −11 ...7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/comments/b9865d8b-46ae-4169-bc83-d75a98164729/values
  140. +0 −24 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/22b6f620-d2f7-42a5-a02e-145733a4e366/values
  141. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/24555ea1-76b5-40a8-918f-115a28f5f36a/values
  142. +0 −6 ...3a7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/27c70465-387e-442e-afb3-e193de42c829/body
  143. +0 −8 ...7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/27c70465-387e-442e-afb3-e193de42c829/values
  144. +0 −7 ...3a7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/6724994b-61de-45f1-b5e9-474a76b49311/body
  145. +0 −8 ...7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/6724994b-61de-45f1-b5e9-474a76b49311/values
  146. +0 −11 ...3a7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/72582f6f-ef8f-4e8f-9d24-f98ad874a3f7/body
  147. +0 −11 ...7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/72582f6f-ef8f-4e8f-9d24-f98ad874a3f7/values
  148. +0 −1 ...3a7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/9f03980b-d572-45bf-8b9a-3fc959798bc6/body
  149. +0 −8 ...7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/9f03980b-d572-45bf-8b9a-3fc959798bc6/values
  150. +0 −1 ...3a7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/aa30c0f4-f428-4cbb-9597-f64cfaf06728/body
  151. +0 −11 ...7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/comments/aa30c0f4-f428-4cbb-9597-f64cfaf06728/values
  152. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/27549110-e491-4651-81ab-84de2ed8e14a/values
  153. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/27bb8bc2-05c2-417a-9d09-928471380d7a/values
  154. +0 −1 ...3a7e/bugs/28acb29f-9890-4857-80fe-b1d83d8623d1/comments/1cd5d4c0-570a-43e1-93fc-860073206f8d/body
  155. +0 −8 ...7e/bugs/28acb29f-9890-4857-80fe-b1d83d8623d1/comments/1cd5d4c0-570a-43e1-93fc-860073206f8d/values
  156. +0 −4 ...3a7e/bugs/28acb29f-9890-4857-80fe-b1d83d8623d1/comments/34e95981-0929-4170-945f-b3c70efd90e7/body
  157. +0 −11 ...7e/bugs/28acb29f-9890-4857-80fe-b1d83d8623d1/comments/34e95981-0929-4170-945f-b3c70efd90e7/values
  158. +0 −1 ...3a7e/bugs/28acb29f-9890-4857-80fe-b1d83d8623d1/comments/d92ac3a4-d56a-4c42-bb21-936d66f5315c/body
  159. +0 −8 ...7e/bugs/28acb29f-9890-4857-80fe-b1d83d8623d1/comments/d92ac3a4-d56a-4c42-bb21-936d66f5315c/values
  160. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/28acb29f-9890-4857-80fe-b1d83d8623d1/values
  161. +0 −5 ...3a7e/bugs/2929814b-2163-45d0-87ba-f7d1ef0a32a9/comments/6d7072de-89b6-4c53-a435-6879c644a0e8/body
  162. +0 −8 ...7e/bugs/2929814b-2163-45d0-87ba-f7d1ef0a32a9/comments/6d7072de-89b6-4c53-a435-6879c644a0e8/values
  163. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/2929814b-2163-45d0-87ba-f7d1ef0a32a9/values
  164. +0 −1 ...3a7e/bugs/2aa60b34-2c8d-4f41-bb97-a57309523262/comments/f21bec0d-cad0-44d2-a301-bfb11adce313/body
  165. +0 −8 ...7e/bugs/2aa60b34-2c8d-4f41-bb97-a57309523262/comments/f21bec0d-cad0-44d2-a301-bfb11adce313/values
  166. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/2aa60b34-2c8d-4f41-bb97-a57309523262/values
  167. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/2b81b428-fc43-4970-9469-b442385b9c0d/values
  168. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/2e0f514f-0282-4fe5-b48c-9c2f8451a288/values
  169. +0 −23 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/074ef29a-3f1d-46dc-8561-7a56af7e6d67/body
  170. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/074ef29a-3f1d-46dc-8561-7a56af7e6d67/values
  171. +0 −47 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/1dba8196-654b-4ca0-9a95-fb334af81863/body
  172. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/1dba8196-654b-4ca0-9a95-fb334af81863/values
  173. +0 −25 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/3bf57ee7-710f-4a01-a8af-8bb9eb9dc937/body
  174. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/3bf57ee7-710f-4a01-a8af-8bb9eb9dc937/values
  175. +0 −50 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/55263144-9775-4b18-ab83-29d66ed91a53/body
  176. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/55263144-9775-4b18-ab83-29d66ed91a53/values
  177. +0 −23 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/68927fef-6ce1-4a1f-a414-28695d913a50/body
  178. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/68927fef-6ce1-4a1f-a414-28695d913a50/values
  179. +0 −123 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/83202b83-eea8-452f-8239-d468940bddba/body
  180. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/83202b83-eea8-452f-8239-d468940bddba/values
  181. +0 −47 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/8c1c4f38-a8d4-4cf9-a9f0-e9846ebbcad8/body
  182. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/8c1c4f38-a8d4-4cf9-a9f0-e9846ebbcad8/values
  183. +0 −35 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/b900f7fd-bab6-48c4-922c-a051f933da58/body
  184. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/b900f7fd-bab6-48c4-922c-a051f933da58/values
  185. +0 −93 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/c7ace551-2982-4683-bca3-b5e66056cce5/body
  186. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/c7ace551-2982-4683-bca3-b5e66056cce5/values
  187. +0 −32 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/cb5689f4-7c36-4c44-b380-ca9e06e80bae/body
  188. +0 −11 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/cb5689f4-7c36-4c44-b380-ca9e06e80bae/values
  189. +0 −45 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/da97e18f-33d6-469e-9d93-6457b9a6bfca/body
  190. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/da97e18f-33d6-469e-9d93-6457b9a6bfca/values
  191. +0 −43 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/e5248100-ea02-4205-a4c1-ac7a577c6362/body
  192. +0 −11 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/e5248100-ea02-4205-a4c1-ac7a577c6362/values
  193. +0 −43 ...3a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/fd7ab206-5937-4ede-9e78-97aff098b677/body
  194. +0 −14 ...7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/comments/fd7ab206-5937-4ede-9e78-97aff098b677/values
  195. +0 −20 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/2f048ac5-5564-4b34-b7f9-605357267ed2/values
  196. +0 −1 ...3a7e/bugs/301724b1-3853-4aff-8f23-44373df7cf1c/comments/0d8af004-8352-4254-b747-d96a40a5d457/body
  197. +0 −8 ...7e/bugs/301724b1-3853-4aff-8f23-44373df7cf1c/comments/0d8af004-8352-4254-b747-d96a40a5d457/values
  198. +0 −17 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/301724b1-3853-4aff-8f23-44373df7cf1c/values
  199. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/312fb152-0155-45c1-9d4d-f49dd5816fbb/values
  200. +0 −51 ...3a7e/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/body
  201. +0 −8 ...7e/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/comments/b2a333f7-eda6-42b9-8940-177f61ca7f48/values
  202. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/31cd490d-a1c2-4ab3-8284-d80395e34dd2/values
  203. +0 −10 ...3a7e/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/comments/ba96f1c0-ba48-4df8-aaf0-4e3a3144fc46/body
  204. +0 −8 ...7e/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/comments/ba96f1c0-ba48-4df8-aaf0-4e3a3144fc46/values
  205. +0 −41 ...3a7e/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/comments/e7d8343a-bd85-4359-bcda-bf0dc1e8177a/body
  206. +0 −11 ...7e/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/comments/e7d8343a-bd85-4359-bcda-bf0dc1e8177a/values
  207. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/3438b72c-6244-4f1d-8722-8c8d41484e35/values
  208. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/35b962a0-a64a-4b5c-82c5-ea740e8a6322/values
  209. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/3613e6e9-db9e-4775-8914-f31f0b4b81ac/values
  210. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/372f8a5c-a1ce-4b07-a7b1-f409033a7eec/values
  211. +0 −1 ...3a7e/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/9aa88bbd-71d0-44fa-804d-3562171f9539/body
  212. +0 −8 ...7e/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/9aa88bbd-71d0-44fa-804d-3562171f9539/values
  213. +0 −4 ...3a7e/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/9e33512e-e3cb-42ec-bc99-8e77587d0d3f/body
  214. +0 −8 ...7e/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/9e33512e-e3cb-42ec-bc99-8e77587d0d3f/values
  215. +0 −1 ...3a7e/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/b76434a3-5cf9-4d2c-820b-64444289c09f/body
  216. +0 −11 ...7e/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/comments/b76434a3-5cf9-4d2c-820b-64444289c09f/values
  217. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/381555eb-f2e3-4ef0-8303-d759c00b390a/values
  218. +0 −10 ...3a7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/287d3cc1-1cd0-449a-b280-87c529e33951/body
  219. +0 −8 ...7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/287d3cc1-1cd0-449a-b280-87c529e33951/values
  220. +0 −16 ...3a7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/303986f2-0b17-4589-bf76-ed1461699c3e/body
  221. +0 −11 ...7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/303986f2-0b17-4589-bf76-ed1461699c3e/values
  222. +0 −4 ...3a7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/478443b3-dd69-4719-b79a-b1279f75b8e4/body
  223. +0 −11 ...7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/478443b3-dd69-4719-b79a-b1279f75b8e4/values
  224. +0 −8 ...3a7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/85a2d1ac-200a-4ae7-841f-9f4e87795dbf/body
  225. +0 −8 ...7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/85a2d1ac-200a-4ae7-841f-9f4e87795dbf/values
  226. +0 −10 ...3a7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/950ac308-f3e1-4956-885a-e79ce3025fd5/body
  227. +0 −11 ...7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/950ac308-f3e1-4956-885a-e79ce3025fd5/values
  228. +0 −2 ...3a7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/f72f8640-2e50-471e-aebe-0ddb8cdd5a2a/body
  229. +0 −11 ...7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/comments/f72f8640-2e50-471e-aebe-0ddb8cdd5a2a/values
  230. +0 −20 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/3e331b72-51fd-4408-bc0d-b6c5ac3b9f3e/values
  231. +0 −3 ...3a7e/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/body
  232. +0 −8 ...7e/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/comments/e1ff6c81-37d8-43ee-9dcf-17a89e07556a/values
  233. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/40dac9af-951e-4b98-8779-9ba02c37f8a1/values
  234. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/42716dc2-6201-4537-b5fd-e1280812a53d/values
  235. +0 −23 ...3a7e/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/comments/29ad0d9e-c05b-4793-bb8b-e8bf237f51b3/body
  236. +0 −11 ...7e/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/comments/29ad0d9e-c05b-4793-bb8b-e8bf237f51b3/values
  237. +0 −33 ...3a7e/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/comments/a92f97a4-e9fe-43f7-bf56-5862b03a2641/body
  238. +0 −11 ...7e/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/comments/a92f97a4-e9fe-43f7-bf56-5862b03a2641/values
  239. +0 −21 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/427e0ca7-17f5-4a5a-8c68-98cc111a2495/values
  240. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/4286c0f8-5703-4bc1-b256-414dc408f067/values
  241. +0 −20 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/47c8fd5f-1f5a-4048-bef7-bb4c9a37c411/values
  242. +0 −29 ...3a7e/bugs/496edad5-1484-413a-bc68-4b01274a65eb/comments/8d927822-eff9-42c4-9541-8b784b3f7db2/body
  243. +0 −8 ...7e/bugs/496edad5-1484-413a-bc68-4b01274a65eb/comments/8d927822-eff9-42c4-9541-8b784b3f7db2/values
  244. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/496edad5-1484-413a-bc68-4b01274a65eb/values
  245. +0 −1 ...3a7e/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/comments/0ac3c4cb-90e3-4b67-b6cb-1186d5d66240/body
  246. +0 −8 ...7e/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/comments/0ac3c4cb-90e3-4b67-b6cb-1186d5d66240/values
  247. +0 −1 ...3a7e/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/comments/942cd941-583d-4020-99e4-80de7e836129/body
  248. +0 −11 ...7e/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/comments/942cd941-583d-4020-99e4-80de7e836129/values
  249. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/4a4609c8-1882-47de-9d30-fee410b8a802/values
  250. +0 −1 ...3a7e/bugs/4f7a4c3b-31e3-4023-8c9d-e67f627a34f0/comments/a8f35fca-8a15-4833-b568-326f0cc89bfa/body
  251. +0 −8 ...7e/bugs/4f7a4c3b-31e3-4023-8c9d-e67f627a34f0/comments/a8f35fca-8a15-4833-b568-326f0cc89bfa/values
  252. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/4f7a4c3b-31e3-4023-8c9d-e67f627a34f0/values
  253. +0 −20 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/4fc71206-4285-417f-8a3c-ed6fb31bbbda/values
  254. +0 −2 ...3a7e/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/comments/1ba36272-7ae1-4f95-8002-7b45e62e6790/body
  255. +0 −11 ...7e/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/comments/1ba36272-7ae1-4f95-8002-7b45e62e6790/values
  256. +0 −2 ...3a7e/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/comments/e173c09a-1b3e-4d8a-a86a-6b8c94a76247/body
  257. +0 −8 ...7e/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/comments/e173c09a-1b3e-4d8a-a86a-6b8c94a76247/values
  258. +0 −14 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/508ea95e-7bc6-4b9b-9e36-a3a87014423d/values
  259. +0 −29 ...3a7e/bugs/51930348-9ccc-4165-af41-6c7450de050e/comments/d304f93b-faf2-477e-9ff8-c77e301fd9f9/body
  260. +0 −11 ...7e/bugs/51930348-9ccc-4165-af41-6c7450de050e/comments/d304f93b-faf2-477e-9ff8-c77e301fd9f9/values
  261. +0 −16 ...3a7e/bugs/51930348-9ccc-4165-af41-6c7450de050e/comments/f1479ecf-4154-4cd4-bbd6-0ed6275b9f98/body
  262. +0 −8 ...7e/bugs/51930348-9ccc-4165-af41-6c7450de050e/comments/f1479ecf-4154-4cd4-bbd6-0ed6275b9f98/values
  263. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/51930348-9ccc-4165-af41-6c7450de050e/values
  264. +0 −20 ...3a7e/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/4c50ca0b-a08f-4723-b00d-4bf342cf86b6/body
  265. +0 −11 ...7e/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/4c50ca0b-a08f-4723-b00d-4bf342cf86b6/values
  266. +0 −12 ...3a7e/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/79fb6ef2-176c-45c0-b898-59c3c3e0aafe/body
  267. +0 −11 ...7e/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/79fb6ef2-176c-45c0-b898-59c3c3e0aafe/values
  268. +0 −9 ...3a7e/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/b17a561a-6100-490e-84eb-d1ae4b617940/body
  269. +0 −8 ...7e/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/comments/b17a561a-6100-490e-84eb-d1ae4b617940/values
  270. +0 −21 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/52034fd0-ec50-424d-b25d-2beaf2d2c317/values
  271. +0 −22 ...ere.org/.be/0b14cd29-041d-48b0-bcf2-7b08c8c53a7e/bugs/528b2e84-a944-4628-a18f-cc1def1c7e16/values
  272. +0 −36 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/0c40c13a-3515-4b45-a8c3-142cceab9254/body
  273. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/0c40c13a-3515-4b45-a8c3-142cceab9254/values
  274. +0 −27 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/1847f1f8-525a-42c4-ae2b-e9377459d2a6/body
  275. +0 −11 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/1847f1f8-525a-42c4-ae2b-e9377459d2a6/values
  276. +0 −115 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/1f40efc1-6efc-4dd8-bdd2-97907e5aa624/body
  277. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/1f40efc1-6efc-4dd8-bdd2-97907e5aa624/values
  278. +0 −58 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/2bb7b4d0-6290-4771-9fff-4aa2e8086b1a/body
  279. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/2bb7b4d0-6290-4771-9fff-4aa2e8086b1a/values
  280. +0 −96 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/2c95ee07-462d-42cf-8dc3-8f5389a392cb/body
  281. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/2c95ee07-462d-42cf-8dc3-8f5389a392cb/values
  282. +0 −52 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/31beb504-c72b-4304-95ba-a66d2bcbc46a/body
  283. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/31beb504-c72b-4304-95ba-a66d2bcbc46a/values
  284. +0 −51 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/49e0425b-3332-4d0e-b371-300eccd55370/body
  285. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/49e0425b-3332-4d0e-b371-300eccd55370/values
  286. +0 −38 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/6e315abe-a080-4369-8729-4aea2dee8494/body
  287. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/6e315abe-a080-4369-8729-4aea2dee8494/values
  288. +0 −22 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/72a519e3-3d6b-4f0f-b412-1310efd255eb/body
  289. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/72a519e3-3d6b-4f0f-b412-1310efd255eb/values
  290. +0 −58 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/744435b7-1521-4059-a55d-f0c403d7b4d8/body
  291. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/744435b7-1521-4059-a55d-f0c403d7b4d8/values
  292. +0 −36 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/96abea83-9867-4c21-8eb8-9e1b1093cba4/body
  293. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/96abea83-9867-4c21-8eb8-9e1b1093cba4/values
  294. +0 −102 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a4720227-43cf-49aa-8f9f-f49f46e3e809/body
  295. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a4720227-43cf-49aa-8f9f-f49f46e3e809/values
  296. +0 −14 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a536cee5-cc8d-4b18-b491-657e0c7998b4/body
  297. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a536cee5-cc8d-4b18-b491-657e0c7998b4/values
  298. +0 −51 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a845096e-3cdf-41ed-a0e3-283439665b92/body
  299. +0 −14 ...7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/a845096e-3cdf-41ed-a0e3-283439665b92/values
  300. +0 −30 ...3a7e/bugs/529c290e-b1cf-4800-be7e-68f1ecb9565c/comments/aad59898-8949-44fb-ad0b-2acea6eb2ef8/body
Sorry, we could not display the entire diff because too many files (675) changed.
View
55 BEXML/BEXML.pyproj
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{acaefc7d-2e27-4e17-8184-89468d9edfb1}</ProjectGuid>
- <ProjectHome>.</ProjectHome>
- <StartupFile>tests\TestParseBErepoWithHTTP.py</StartupFile>
- <SearchPath>
- </SearchPath>
- <WorkingDirectory>.</WorkingDirectory>
- <InterpreterId>fcc291aa-427c-498c-a4d7-4502d6449b8c</InterpreterId>
- <LaunchProvider>IronPython (.NET) launcher</LaunchProvider>
- <InterpreterVersion>2.7</InterpreterVersion>
- <OutputPath>.</OutputPath>
- <Name>BEXML</Name>
- <RootNamespace>BEXML</RootNamespace>
- <CommandLineArguments />
- <InterpreterPath />
- <InterpreterArguments />
- <DebugStdLib>False</DebugStdLib>
- <IsWindowsApplication>False</IsWindowsApplication>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
- <DebugSymbols>true</DebugSymbols>
- <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
- <DebugSymbols>true</DebugSymbols>
- <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
- </PropertyGroup>
- <ItemGroup>
- <Folder Include="libBEXML\" />
- <Folder Include="libBEXML\parsers\" />
- <Folder Include="tests\" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="bexmlsrv.py" />
- <Compile Include="libBEXML\coerce_datetime.py" />
- <Compile Include="libBEXML\comment.py" />
- <Compile Include="libBEXML\issue.py" />
- <Compile Include="libBEXML\parserbase.py" />
- <Compile Include="libBEXML\parsers\be_dir.py" />
- <Compile Include="libBEXML\parsers\__init__.py" />
- <Compile Include="libBEXML\propertieddictionary.py" />
- <Compile Include="libBEXML\__init__.py" />
- <Compile Include="setup.py" />
- <Compile Include="tests\TestParseBErepoWithHTTP.py" />
- <Compile Include="tests\TestParseBErepoWithLib.py" />
- </ItemGroup>
- <ItemGroup>
- <Content Include="tests\bugs.bugseverywhere.org.xml" />
- </ItemGroup>
- <Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
-</Project>
View
9 BEXML/bexml.xpr
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
- <meta>
- <filters directoryPatterns="" filePatterns=""
- positiveFilePatterns="" showHiddenFiles="false"/>
- <options/>
- </meta>
- <projectTree name="bexml.xpr"/>
-</project>
View
121 BEXML/bexml.xsd
@@ -1,121 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" elementFormDefault="qualified">
- <xs:element name="be-xml">
- <xs:complexType>
- <xs:sequence>
- <xs:element maxOccurs="unbounded" ref="bug"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
-
- <xs:element name="bug">
- <xs:complexType>
- <xs:sequence>
- <xs:element ref="uuid"/>
- <xs:element ref="short-name"/>
- <xs:element ref="severity"/>
- <xs:element ref="status"/>
- <xs:element minOccurs="0" ref="assigned"/>
- <xs:element minOccurs="0" ref="reporter"/>
- <xs:element minOccurs="0" ref="creator"/>
- <xs:element ref="created"/>
- <xs:element ref="summary"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="extra-string"/>
- <xs:element minOccurs="0" maxOccurs="unbounded" ref="comment"/>
- </xs:sequence>
- </xs:complexType>
- <xs:key name="bug_uuid">
- <xs:selector xpath="uuid"/>
- <xs:field xpath="."/>
- </xs:key>
- <xs:key name="bug_short-name">
- <xs:selector xpath="short-name"/>
- <xs:field xpath="."/>
- </xs:key>
- <xs:key name="comment_uuid">
- <xs:selector xpath="comment/uuid"/>
- <xs:field xpath="."/>
- </xs:key>
- <xs:key name="comment_short-name">
- <xs:selector xpath="comment/short-name"/>
- <xs:field xpath="."/>
- </xs:key>
- <xs:keyref refer="comment_uuid" name="in-reply-to">
- <xs:selector xpath="*/in-reply-to"/>
- <xs:field xpath="."/>
- </xs:keyref>
- </xs:element>
-
- <xs:element name="severity">
- <xs:simpleType>
- <xs:restriction base="xs:NCName">
- <xs:enumeration value="minor"/>
- <xs:enumeration value="wishlist"/>
- <xs:enumeration value="serious"/>
- <xs:enumeration value="major"/>
- <xs:enumeration value="critical"/>
- <xs:enumeration value="fatal"/>
- <xs:enumeration value="target"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:element>
- <xs:element name="status">
- <xs:simpleType>
- <xs:restriction base="xs:NCName">
- <xs:enumeration value="unconfirmed"/>
- <xs:enumeration value="open"/>
- <xs:enumeration value="closed"/>
- <xs:enumeration value="fixed"/>
- <xs:enumeration value="wontfix"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:element>
- <xs:element name="assigned" type="xs:string"/>
- <xs:element name="reporter" type="xs:string"/>
- <xs:element name="creator" type="xs:string"/>
- <xs:element name="created"> <!-- Tue, 21 Jul 2009 18:32:12 +0000 -->
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:pattern value="(|.* [0-3]{0,1}[0-9] (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} [0-2][0-9]:[0-5][0-9]:[0-5][0-9] (\+|-)[0-9]{4})"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:element>
- <xs:element name="summary" type="xs:string"/>
- <xs:element name="extra-string">
- <!-- contains TAG: or BLOCKS: or BLOCKED-BY: -->
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:pattern value="(TAG:|BLOCKS:|BLOCKED-BY:).+"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:element>
- <xs:element name="alt-id" type="xs:string"/>
- <xs:element name="in-reply-to" type="xs:string"/>
- <xs:element name="uuid" type="xs:string"/>
- <xs:element name="short-name" type="xs:string"/>
-
- <xs:element name="comment">
- <xs:complexType>
- <xs:sequence>
- <xs:element ref="uuid"/>
- <xs:element minOccurs="0" ref="alt-id"/>
- <xs:element ref="short-name"/>
- <xs:element minOccurs="0" ref="in-reply-to"/>
- <xs:element ref="author"/>
- <xs:element ref="date"/>
- <xs:element ref="content-type"/>
- <xs:element ref="body"/>
- </xs:sequence>
- </xs:complexType>
- </xs:element>
- <xs:element name="author" type="xs:string"/>
- <xs:element name="date">
- <xs:simpleType>
- <xs:restriction base="xs:string">
- <xs:pattern value="(|.* [0-3]{0,1}[0-9] (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} [0-2][0-9]:[0-5][0-9]:[0-5][0-9] (\+|-)[0-9]{4})"/>
- </xs:restriction>
- </xs:simpleType>
- </xs:element>
- <xs:element name="content-type" type="xs:string"/>
- <xs:element name="body" type="xs:string"/>
-</xs:schema>
View
241 BEXML/bexmlsrv.py
@@ -1,241 +0,0 @@
-# BEXML, a fast Bugs Everywhere parser with RESTful API and other issue tracker backends
-# (C) 2012 Niall Douglas http://www.nedproductions.biz/
-# Created: March 2012
-
-from libBEXML import BEXML, parserbase
-import web, urlparse, os, inspect, logging, sys, traceback, types, collections
-import omnijson as json
-from mimerender import mimerender
-from cgi import escape
-from uuid import UUID
-
-DEBUG=True
-
-web.config.debug = False
-web.config.session_parameters['timeout'] = 5*60 # 5 minutes, then expire the session
-logging.basicConfig(level=logging.WARN)
-log=logging.getLogger(__name__)
-
-parserAPIs=dict([x for x in inspect.getmembers(parserbase.ParserBase, inspect.ismethod) if x[0][0]!='_'])
-log.info("APIs found on ParserBase are: "+repr(parserAPIs))
-
-def inspect_parameters(routine):
- return [x for x in inspect.getargspec(routine).args if x is not 'self']
-
-def inspect_apis(routines):
- ret={}
- for routine in routines:
- ret[routine]=inspect_parameters(routines[routine])
- return ret
-
-
-def XMLise(v, indent=0):
- ret=u''.rjust(indent)
- ret+=u"<dictionary>\n"
- indent+=3
- for k in v:
- x=v[k]
- ret+=u''.rjust(indent)
- ret+=u'<item key="'+unicode(k)+u'">'
- if isinstance(x, dict):
- ret+=u'\n'
- ret+=XMLise(x, indent+3)
- ret+=u''.rjust(indent)
- elif isinstance(x, list):
- ret+=u'<list>\n'
- for i in x:
- ret+=u''.rjust(indent+6)+u'<item>'
- ret+=escape(unicode(i))
- ret+='</item>\n'
- ret+=u''.rjust(indent+3)+u'</list>'
- else:
- ret+=escape(unicode(x))
- ret+=u'</item>\n'
- indent-=3
- ret+=u''.rjust(indent)
- ret+=u"</dictionary>\n"
- return ret
-
-def FixupTypes(v):
- """Specialised serialisation for certain types"""
- if isinstance(v, UUID):
- return v.urn[9:]
- elif isinstance(v, dict):
- ret={}
- for item in v:
- ret[item]=FixupTypes(v[item])
- return ret
- elif isinstance(v, list):
- for i in xrange(0, len(v)):
- v[i]=FixupTypes(v[i])
- return v
- return v
-
-render_xml = lambda **args: XMLise(FixupTypes(args))
-render_json = lambda **args: json.dumps(FixupTypes(args))
-render_html = lambda **args: u'<html><body><pre>%s</pre></body></html>'%escape(XMLise(FixupTypes(args)))
-render_txt = lambda **args: repr(FixupTypes(args))
-
-urls = (
- '/', 'index',
- '/apilist', 'apilist',
- '/open(.*)', 'open',
- '/cancel/(.+)', 'cancel',
- '/(.+)', 'catchall',
-)
-app = web.application(urls, locals())
-session = web.session.Session(app, web.session.DiskStore('bexmlsrv_sessions'), initializer={'uri': None})
-sessionToParserInfo = {}
-class ParserInfo:
- """Keeps session to parser info"""
- def __init__(self, session, uri, parser):
- self.session=session
- self.uri=uri
- self.parser=parser
- self.generators={}
- # TODO: Find some way of poking a hook into session such that when it expires, it deletes this object
-
-def excfilter(func):
- def dec(*args, **kwargs):
- try:
- return func(*args, **kwargs)
- except AssertionError, e:
- raise web.HTTPError('400 Bad Request', {'Content-Type': 'text/plain'}, 'Error: '+e.message+('\n\n'+traceback.format_exc() if DEBUG else ''))
- except Exception, e:
- raise web.HTTPError('500 Internal Error', {'Content-Type': 'text/plain'}, 'Error: '+e.message+('\n\n'+traceback.format_exc() if DEBUG else ''))
- return dec
-
-class index:
- @mimerender(
- default = 'html',
- html = render_html,
- xml = render_xml,
- json = render_json,
- txt = render_txt
- )
- @excfilter
- def GET(self):
- return {"result" : "Call /apilist for a list of APIs you can call"}
-
-class apilist:
- @mimerender(
- default = 'html',
- html = render_html,
- xml = render_xml,
- json = render_json,
- txt = render_txt
- )
- @excfilter
- def GET(self):
- ret={'result': { 'open' : inspect_parameters(BEXML),
- 'parser' : inspect_apis(parserAPIs)
- } }
- return ret
-
-class open:
- @mimerender(
- default = 'html',
- html = render_html,
- xml = render_xml,
- json = render_json,
- txt = render_txt
- )
- @excfilter
- def GET(self, api):
- query=urlparse.parse_qs(web.ctx.env['QUERY_STRING'])
- if 'uri' not in query:
- raise AssertionError, "Need the uri parameter"
- uri=query['uri'][0]
- # If it's a file uri, make sure it's in the current working directory and it exists
- up=urlparse.urlparse(uri)
- if up.scheme.lower() not in ['file', 'http', 'https']:
- raise AssertionError, "Uri '"+up.scheme+"' scheme needs to be one of file, http, https"
- if up.scheme.lower()=='file':
- if up.netloc[0]=='/' or up.netloc[0]=='\\':
- raise AssertionError, "Cannot use absolute paths for file access: "+up.netloc
- if not os.path.exists(up.netloc):
- raise AssertionError, "Path '"+up.netloc+"' not found under the current working directory"
- session.uri=uri
- sessionToParserInfo[session.session_id]=ParserInfo(session, uri, BEXML(session.uri))
- return {'version': '0.01', 'result': 'OK'}
-
-class cancel:
- @mimerender(
- default = 'html',
- html = render_html,
- xml = render_xml,
- json = render_json,
- txt = render_txt
- )
- @excfilter
- def GET(self, api):
- query=urlparse.parse_qs(web.ctx.env['QUERY_STRING'])
- if session.uri is None:
- raise AssertionError, "Need to call /open to open a parsing session first"
- if api not in parserAPIs:
- raise AssertionError, "API '"+api+"' not in allowed APIs: "+repr(parserAPIs)
- reloaded=False
- if session.session_id in sessionToParserInfo:
- pi=sessionToParserInfo[session.session_id]
- else:
- raise AssertionError, "Cannot cancel in an invalid session"
- method=getattr(pi.parser, api)
- if method not in pi.generators:
- raise AssertionError, "Cannot cancel an API not in operation"
- else:
- del pi.generators[method]
- return {'result': 'OK'}
-
-class catchall:
- @mimerender(
- default = 'html',
- html = render_html,
- xml = render_xml,
- json = render_json,
- txt = render_txt
- )
- @excfilter
- def GET(self, api):
- query=urlparse.parse_qs(web.ctx.env['QUERY_STRING'])
- if session.uri is None:
- raise AssertionError, "Need to call /open to open a parsing session first"
- if api not in parserAPIs:
- raise AssertionError, "API '"+api+"' not in allowed APIs: "+repr(parserAPIs)
- reloaded=False
- batchitems=1
- if '__batch_items' in query:
- batchitems=int(query['__batch_items'][0])
- del query['__batch_items']
- if batchitems<1: batchitems=1
- elif batchitems>50: batchitems=50
- if session.session_id in sessionToParserInfo:
- pi=sessionToParserInfo[session.session_id]
- else:
- sessionToParserInfo[session.session_id]=pi=ParserInfo(session, uri, BEXML(session.uri))
- reloaded=True
- method=getattr(pi.parser, api)
- if method not in pi.generators:
- methodspec=inspect.getargspec(method)
- mandpars=[x for x in methodspec.args if x is not 'self']
- if methodspec.defaults is not None:
- mandpars=mandpars[:-len(methodspec.defaults)]
- for parameter in mandpars:
- if parameter not in query:
- raise AssertionError, "Mandatory parameter '"+parameter+"' is missing"
- # urlparse allows multiple values per parameter, we only want the first
- for parameter in query:
- query[parameter]=query[parameter][0]
- result=method(**query)
- if isinstance(result, types.GeneratorType):
- pi.generators[method]=result
- if method in pi.generators:
- try:
- result=[]
- for n in xrange(0, batchitems):
- result.append(pi.generators[method].next())
- except StopIteration:
- del pi.generators[method]
- return {'reloaded' : reloaded, 'result': result}
-
-if __name__ == "__main__":
- app.run()
View
485 BEXML/distribute_setup.py
@@ -1,485 +0,0 @@
-#!python
-"""Bootstrap distribute installation
-
-If you want to use setuptools in your package's setup.py, just include this
-file in the same directory with it, and add this to the top of your setup.py::
-
- from distribute_setup import use_setuptools
- use_setuptools()
-
-If you want to require a specific version of setuptools, set a download
-mirror, or use an alternate download directory, you can do so by supplying
-the appropriate options to ``use_setuptools()``.
-
-This file can also be run as a script to install or upgrade setuptools.
-"""
-import os
-import sys
-import time
-import fnmatch
-import tempfile
-import tarfile
-from distutils import log
-
-try:
- from site import USER_SITE
-except ImportError:
- USER_SITE = None
-
-try:
- import subprocess
-
- def _python_cmd(*args):
- args = (sys.executable,) + args
- return subprocess.call(args) == 0
-
-except ImportError:
- # will be used for python 2.3
- def _python_cmd(*args):
- args = (sys.executable,) + args
- # quoting arguments if windows
- if sys.platform == 'win32':
- def quote(arg):
- if ' ' in arg:
- return '"%s"' % arg
- return arg
- args = [quote(arg) for arg in args]
- return os.spawnl(os.P_WAIT, sys.executable, *args) == 0
-
-DEFAULT_VERSION = "0.6.19"
-DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/"
-SETUPTOOLS_FAKED_VERSION = "0.6c11"
-
-SETUPTOOLS_PKG_INFO = """\
-Metadata-Version: 1.0
-Name: setuptools
-Version: %s
-Summary: xxxx
-Home-page: xxx
-Author: xxx
-Author-email: xxx
-License: xxx
-Description: xxx
-""" % SETUPTOOLS_FAKED_VERSION
-
-
-def _install(tarball):
- # extracting the tarball
- tmpdir = tempfile.mkdtemp()
- log.warn('Extracting in %s', tmpdir)
- old_wd = os.getcwd()
- try:
- os.chdir(tmpdir)
- tar = tarfile.open(tarball)
- _extractall(tar)
- tar.close()
-
- # going in the directory
- subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
- os.chdir(subdir)
- log.warn('Now working in %s', subdir)
-
- # installing
- log.warn('Installing Distribute')
- if not _python_cmd('setup.py', 'install'):
- log.warn('Something went wrong during the installation.')
- log.warn('See the error message above.')
- finally:
- os.chdir(old_wd)
-
-
-def _build_egg(egg, tarball, to_dir):
- # extracting the tarball
- tmpdir = tempfile.mkdtemp()
- log.warn('Extracting in %s', tmpdir)
- old_wd = os.getcwd()
- try:
- os.chdir(tmpdir)
- tar = tarfile.open(tarball)
- _extractall(tar)
- tar.close()
-
- # going in the directory
- subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
- os.chdir(subdir)
- log.warn('Now working in %s', subdir)
-
- # building an egg
- log.warn('Building a Distribute egg in %s', to_dir)
- _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir)
-
- finally:
- os.chdir(old_wd)
- # returning the result
- log.warn(egg)
- if not os.path.exists(egg):
- raise IOError('Could not build the egg.')
-
-
-def _do_download(version, download_base, to_dir, download_delay):
- egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg'
- % (version, sys.version_info[0], sys.version_info[1]))
- if not os.path.exists(egg):
- tarball = download_setuptools(version, download_base,
- to_dir, download_delay)
- _build_egg(egg, tarball, to_dir)
- sys.path.insert(0, egg)
- import setuptools
- setuptools.bootstrap_install_from = egg
-
-
-def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
- to_dir=os.curdir, download_delay=15, no_fake=True):
- # making sure we use the absolute path
- to_dir = os.path.abspath(to_dir)
- was_imported = 'pkg_resources' in sys.modules or \
- 'setuptools' in sys.modules
- try:
- try:
- import pkg_resources
- if not hasattr(pkg_resources, '_distribute'):
- if not no_fake:
- _fake_setuptools()
- raise ImportError
- except ImportError:
- return _do_download(version, download_base, to_dir, download_delay)
- try:
- pkg_resources.require("distribute>="+version)
- return
- except pkg_resources.VersionConflict:
- e = sys.exc_info()[1]
- if was_imported:
- sys.stderr.write(
- "The required version of distribute (>=%s) is not available,\n"
- "and can't be installed while this script is running. Please\n"
- "install a more recent version first, using\n"
- "'easy_install -U distribute'."
- "\n\n(Currently using %r)\n" % (version, e.args[0]))
- sys.exit(2)
- else:
- del pkg_resources, sys.modules['pkg_resources'] # reload ok
- return _do_download(version, download_base, to_dir,
- download_delay)
- except pkg_resources.DistributionNotFound:
- return _do_download(version, download_base, to_dir,
- download_delay)
- finally:
- if not no_fake:
- _create_fake_setuptools_pkg_info(to_dir)
-
-def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
- to_dir=os.curdir, delay=15):
- """Download distribute from a specified location and return its filename
-
- `version` should be a valid distribute version number that is available
- as an egg for download under the `download_base` URL (which should end
- with a '/'). `to_dir` is the directory where the egg will be downloaded.
- `delay` is the number of seconds to pause before an actual download
- attempt.
- """
- # making sure we use the absolute path
- to_dir = os.path.abspath(to_dir)
- try:
- from urllib.request import urlopen
- except ImportError:
- from urllib2 import urlopen
- tgz_name = "distribute-%s.tar.gz" % version
- url = download_base + tgz_name
- saveto = os.path.join(to_dir, tgz_name)
- src = dst = None
- if not os.path.exists(saveto): # Avoid repeated downloads
- try:
- log.warn("Downloading %s", url)
- src = urlopen(url)
- # Read/write all in one block, so we don't create a corrupt file
- # if the download is interrupted.
- data = src.read()
- dst = open(saveto, "wb")
- dst.write(data)
- finally:
- if src:
- src.close()
- if dst:
- dst.close()
- return os.path.realpath(saveto)
-
-def _no_sandbox(function):
- def __no_sandbox(*args, **kw):
- try:
- from setuptools.sandbox import DirectorySandbox
- if not hasattr(DirectorySandbox, '_old'):
- def violation(*args):
- pass
- DirectorySandbox._old = DirectorySandbox._violation
- DirectorySandbox._violation = violation
- patched = True
- else:
- patched = False
- except ImportError:
- patched = False
-
- try:
- return function(*args, **kw)
- finally:
- if patched:
- DirectorySandbox._violation = DirectorySandbox._old
- del DirectorySandbox._old
-
- return __no_sandbox
-
-def _patch_file(path, content):
- """Will backup the file then patch it"""
- existing_content = open(path).read()
- if existing_content == content:
- # already patched
- log.warn('Already patched.')
- return False
- log.warn('Patching...')
- _rename_path(path)
- f = open(path, 'w')
- try:
- f.write(content)
- finally:
- f.close()
- return True
-
-_patch_file = _no_sandbox(_patch_file)
-
-def _same_content(path, content):
- return open(path).read() == content
-
-def _rename_path(path):
- new_name = path + '.OLD.%s' % time.time()
- log.warn('Renaming %s into %s', path, new_name)
- os.rename(path, new_name)
- return new_name
-
-def _remove_flat_installation(placeholder):
- if not os.path.isdir(placeholder):
- log.warn('Unkown installation at %s', placeholder)
- return False
- found = False
- for file in os.listdir(placeholder):
- if fnmatch.fnmatch(file, 'setuptools*.egg-info'):
- found = True
- break
- if not found:
- log.warn('Could not locate setuptools*.egg-info')
- return
-
- log.warn('Removing elements out of the way...')
- pkg_info = os.path.join(placeholder, file)
- if os.path.isdir(pkg_info):
- patched = _patch_egg_dir(pkg_info)
- else:
- patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO)
-
- if not patched:
- log.warn('%s already patched.', pkg_info)
- return False
- # now let's move the files out of the way
- for element in ('setuptools', 'pkg_resources.py', 'site.py'):
- element = os.path.join(placeholder, element)
- if os.path.exists(element):
- _rename_path(element)
- else:
- log.warn('Could not find the %s element of the '
- 'Setuptools distribution', element)
- return True
-
-_remove_flat_installation = _no_sandbox(_remove_flat_installation)
-
-def _after_install(dist):
- log.warn('After install bootstrap.')
- placeholder = dist.get_command_obj('install').install_purelib
- _create_fake_setuptools_pkg_info(placeholder)
-
-def _create_fake_setuptools_pkg_info(placeholder):
- if not placeholder or not os.path.exists(placeholder):
- log.warn('Could not find the install location')
- return
- pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1])
- setuptools_file = 'setuptools-%s-py%s.egg-info' % \
- (SETUPTOOLS_FAKED_VERSION, pyver)
- pkg_info = os.path.join(placeholder, setuptools_file)
- if os.path.exists(pkg_info):
- log.warn('%s already exists', pkg_info)
- return
-
- log.warn('Creating %s', pkg_info)
- f = open(pkg_info, 'w')
- try:
- f.write(SETUPTOOLS_PKG_INFO)
- finally:
- f.close()
-
- pth_file = os.path.join(placeholder, 'setuptools.pth')
- log.warn('Creating %s', pth_file)
- f = open(pth_file, 'w')
- try:
- f.write(os.path.join(os.curdir, setuptools_file))
- finally:
- f.close()
-
-_create_fake_setuptools_pkg_info = _no_sandbox(_create_fake_setuptools_pkg_info)
-
-def _patch_egg_dir(path):
- # let's check if it's already patched
- pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')
- if os.path.exists(pkg_info):
- if _same_content(pkg_info, SETUPTOOLS_PKG_INFO):
- log.warn('%s already patched.', pkg_info)
- return False
- _rename_path(path)
- os.mkdir(path)
- os.mkdir(os.path.join(path, 'EGG-INFO'))
- pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO')
- f = open(pkg_info, 'w')
- try:
- f.write(SETUPTOOLS_PKG_INFO)
- finally:
- f.close()
- return True
-
-_patch_egg_dir = _no_sandbox(_patch_egg_dir)
-
-def _before_install():
- log.warn('Before install bootstrap.')
- _fake_setuptools()
-
-
-def _under_prefix(location):
- if 'install' not in sys.argv:
- return True
- args = sys.argv[sys.argv.index('install')+1:]
- for index, arg in enumerate(args):
- for option in ('--root', '--prefix'):
- if arg.startswith('%s=' % option):
- top_dir = arg.split('root=')[-1]
- return location.startswith(top_dir)
- elif arg == option:
- if len(args) > index:
- top_dir = args[index+1]
- return location.startswith(top_dir)
- if arg == '--user' and USER_SITE is not None:
- return location.startswith(USER_SITE)
- return True
-
-
-def _fake_setuptools():
- log.warn('Scanning installed packages')
- try:
- import pkg_resources
- except ImportError:
- # we're cool
- log.warn('Setuptools or Distribute does not seem to be installed.')
- return
- ws = pkg_resources.working_set
- try:
- setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools',
- replacement=False))
- except TypeError:
- # old distribute API
- setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools'))
-
- if setuptools_dist is None:
- log.warn('No setuptools distribution found')
- return
- # detecting if it was already faked
- setuptools_location = setuptools_dist.location
- log.warn('Setuptools installation detected at %s', setuptools_location)
-
- # if --root or --preix was provided, and if
- # setuptools is not located in them, we don't patch it
- if not _under_prefix(setuptools_location):
- log.warn('Not patching, --root or --prefix is installing Distribute'
- ' in another location')
- return
-
- # let's see if its an egg
- if not setuptools_location.endswith('.egg'):
- log.warn('Non-egg installation')
- res = _remove_flat_installation(setuptools_location)
- if not res:
- return
- else:
- log.warn('Egg installation')
- pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO')
- if (os.path.exists(pkg_info) and
- _same_content(pkg_info, SETUPTOOLS_PKG_INFO)):
- log.warn('Already patched.')
- return
- log.warn('Patching...')
- # let's create a fake egg replacing setuptools one
- res = _patch_egg_dir(setuptools_location)
- if not res:
- return
- log.warn('Patched done.')
- _relaunch()
-
-
-def _relaunch():
- log.warn('Relaunching...')
- # we have to relaunch the process
- # pip marker to avoid a relaunch bug
- if sys.argv[:3] == ['-c', 'install', '--single-version-externally-managed']:
- sys.argv[0] = 'setup.py'
- args = [sys.executable] + sys.argv
- sys.exit(subprocess.call(args))
-
-
-def _extractall(self, path=".", members=None):
- """Extract all members from the archive to the current working
- directory and set owner, modification time and permissions on
- directories afterwards. `path' specifies a different directory
- to extract to. `members' is optional and must be a subset of the
- list returned by getmembers().
- """
- import copy
- import operator
- from tarfile import ExtractError
- directories = []
-
- if members is None:
- members = self
-
- for tarinfo in members:
- if tarinfo.isdir():
- # Extract directories with a safe mode.
- directories.append(tarinfo)
- tarinfo = copy.copy(tarinfo)
- tarinfo.mode = 448 # decimal for oct 0700
- self.extract(tarinfo, path)
-
- # Reverse sort directories.
- if sys.version_info < (2, 4):
- def sorter(dir1, dir2):
- return cmp(dir1.name, dir2.name)
- directories.sort(sorter)
- directories.reverse()
- else:
- directories.sort(key=operator.attrgetter('name'), reverse=True)
-
- # Set correct owner, mtime and filemode on directories.
- for tarinfo in directories:
- dirpath = os.path.join(path, tarinfo.name)
- try:
- self.chown(tarinfo, dirpath)
- self.utime(tarinfo, dirpath)
- self.chmod(tarinfo, dirpath)
- except ExtractError:
- e = sys.exc_info()[1]
- if self.errorlevel > 1:
- raise
- else:
- self._dbg(1, "tarfile: %s" % e)
-
-
-def main(argv, version=DEFAULT_VERSION):
- """Install or upgrade setuptools and EasyInstall"""
- tarball = download_setuptools()
- _install(tarball)
-
-
-if __name__ == '__main__':
- main(sys.argv[1:])
View
75 BEXML/ironpython/CompileToStandalone.py
@@ -1,75 +0,0 @@
-#!/usr/bin/env python
-# CompileToStandalone, a Python to .NET ILR compiler which produces standalone binaries
-# (C) 2012 Niall Douglas http://www.nedproductions.biz/
-# Created: March 2012
-
-import modulefinder, sys, os, subprocess, _winreg
-
-if len(sys.argv)<2:
- print("Usage: CompileEverythingToILR.py <source py> [-outdir=<dest dir>]")
- sys.exit(0)
-
-if sys.platform=="cli":
- print("ERROR: IronPython's ModuleFinder currently doesn't work, so run me under CPython please")
- sys.exit(1)
-
-sourcepath=sys.argv[1]
-destpath=sys.argv[2][8:] if len(sys.argv)==3 else os.path.dirname(sys.argv[0])
-ironpythonpath=None
-try:
- try:
- keyh=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\IronPython\\2.7\\InstallPath")
- ironpythonpath=_winreg.QueryValue(keyh, None)
- except Exception as e:
- try:
- keyh=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\IronPython\\2.7\\InstallPath")
- ironpythonpath=_winreg.QueryValue(keyh, "")
- except Exception as e:
- pass
-finally:
- if ironpythonpath is not None:
- _winreg.CloseKey(keyh)
- print("IronPython found at "+ironpythonpath)
- else:
- raise Exception("Cannot find IronPython in the registry")
-
-# What we do now is to load the python source but against the customised IronPython runtime
-# library which has been hacked to work with IronPython. This spits out the right set of
-# modules mostly, but we include the main python's site-packages in order to resolve any
-# third party packages
-print("Scanning '"+sourcepath+"' for dependencies and outputting into '"+destpath+"' ...")
-searchpaths=[".", ironpythonpath+os.sep+"Lib"]
-searchpaths+=[x for x in sys.path if 'site-packages' in x]
-finder=modulefinder.ModuleFinder(searchpaths)
-finder.run_script(sourcepath)
-print(finder.report())
-modules=[]
-badmodules=finder.badmodules.keys()
-for name, mod in finder.modules.iteritems():
- path=mod.__file__
- # Ignore internal modules
- if path is None: continue
- # Ignore DLL internal modules
- #if '\\DLLs\\' in path: continue
- # Watch out for C modules
- if os.path.splitext(path)[1]=='.pyd':
- print("WARNING: I don't support handling C modules at '"+path+"'")
- badmodules.append(name)
- continue
- modules.append((name, os.path.abspath(path)))
-modules.sort()
-print("Modules not imported due to not found, error or being a C module:")
-print("\n".join(badmodules))
-raw_input("\nPress Return if you are happy with these missing modules ...")
-
-with open(destpath+os.sep+"files.txt", "w") as oh:
- oh.writelines([x[1]+'\n' for x in modules])
-cmd='ipy64 '+destpath+os.sep+'pyc.py /main:"'+os.path.abspath(sourcepath)+'" /out:'+os.path.splitext(os.path.basename(sourcepath))[0]+' /target:exe /standalone /platform:x86 /files:'+destpath+os.sep+'files.txt'
-print(cmd)
-cwd=os.getcwd()
-try:
- os.chdir(destpath)
- retcode=subprocess.call(cmd, shell=True)
-finally:
- os.chdir(cwd)
-sys.exit(retcode)
View
260 BEXML/ironpython/pyc.py
@@ -1,260 +0,0 @@
-#####################################################################################
-#
-# Copyright (c) Microsoft Corporation. All rights reserved.
-#
-# This source code is subject to terms and conditions of the Apache License, Version 2.0. A
-# copy of the license can be found in the License.html file at the root of this distribution. If
-# you cannot locate the Apache License, Version 2.0, please send an email to
-# ironpy@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
-# by the terms of the Apache License, Version 2.0.
-#
-# You must not remove this notice, or any other, from this software.
-#
-#
-#####################################################################################
-
-"""
-pyc: The Command-Line Python Compiler
-
-Usage: ipy.exe pyc.py [options] file [file ...]
-
-Options:
- /out:output_file Output file name (default is main_file.<extenstion>)
- /target:dll Compile only into dll. Default
- /target:exe Generate console executable stub for startup in addition to dll.
- /target:winexe Generate windows executable stub for startup in addition to dll.
- /files:input_file Read to read files from, one per line.
- /? /h This message
-
-EXE/WinEXE specific options:
- /main:main_file.py Main file of the project (module to be executed first)
- /platform:x86 Compile for x86 only
- /platform:x64 Compile for x64 only
- /embed Embeds the generated DLL as a resource into the executable which is loaded at runtime
- /standalone Embeds the IronPython assemblies into the stub executable.
-
-Example:
- ipy.exe pyc.py /main:Program.py Form.py /target:winexe
-"""
-
-import sys
-import clr
-clr.AddReferenceByPartialName("IronPython")
-
-from System.Collections.Generic import List
-import IronPython.Hosting as Hosting
-from IronPython.Runtime.Operations import PythonOps
-import System
-from System.Reflection import Emit, Assembly
-from System.Reflection.Emit import OpCodes, AssemblyBuilderAccess
-from System.Reflection import AssemblyName, TypeAttributes, MethodAttributes, ResourceAttributes, CallingConventions
-
-def GenerateExe(name, targetKind, platform, machine, main_module, embed, standalone):
- """generates the stub .EXE file for starting the app"""
- aName = AssemblyName(System.IO.FileInfo(name).Name)
- ab = PythonOps.DefineDynamicAssembly(aName, AssemblyBuilderAccess.RunAndSave)
- mb = ab.DefineDynamicModule(name, aName.Name + ".exe")
- tb = mb.DefineType("PythonMain", TypeAttributes.Public)
- assemblyResolveMethod = None
-
- if standalone:
- print "Generating stand alone executable"
- embed = True
-
- for a in System.AppDomain.CurrentDomain.GetAssemblies():
- n = AssemblyName(a.FullName)
- if not a.IsDynamic and not a.EntryPoint and (n.Name.StartsWith("IronPython") or n.Name in ['Microsoft.Dynamic', 'Microsoft.Scripting']):
- print "\tEmbedding %s %s" % (n.Name, str(n.Version))
- f = System.IO.FileStream(a.Location, System.IO.FileMode.Open, System.IO.FileAccess.Read)
- mb.DefineManifestResource("Dll." + n.Name, f, ResourceAttributes.Public)
-
- # we currently do no error checking on what is passed in to the assemblyresolve event handler
- assemblyResolveMethod = tb.DefineMethod("AssemblyResolve", MethodAttributes.Public | MethodAttributes.Static, clr.GetClrType(Assembly), (clr.GetClrType(System.Object), clr.GetClrType(System.ResolveEventArgs)))
- gen = assemblyResolveMethod.GetILGenerator()
- s = gen.DeclareLocal(clr.GetClrType(System.IO.Stream)) # resource stream
- gen.Emit(OpCodes.Ldnull)
- gen.Emit(OpCodes.Stloc, s)
- d = gen.DeclareLocal(clr.GetClrType(System.Array[System.Byte])) # data buffer
- gen.EmitCall(OpCodes.Call, clr.GetClrType(Assembly).GetMethod("GetEntryAssembly"), ())
- gen.Emit(OpCodes.Ldstr, "Dll.")
- gen.Emit(OpCodes.Ldarg_1) # The event args
- gen.EmitCall(OpCodes.Callvirt, clr.GetClrType(System.ResolveEventArgs).GetMethod("get_Name"), ())
- gen.Emit(OpCodes.Newobj, clr.GetClrType(AssemblyName).GetConstructor((str, )))
- gen.EmitCall(OpCodes.Call, clr.GetClrType(AssemblyName).GetMethod("get_Name"), ())
- gen.EmitCall(OpCodes.Call, clr.GetClrType(str).GetMethod("Concat", (str, str)), ())
- gen.EmitCall(OpCodes.Callvirt, clr.GetClrType(Assembly).GetMethod("GetManifestResourceStream", (str, )), ())
- gen.Emit(OpCodes.Stloc, s)
- gen.Emit(OpCodes.Ldloc, s)
- gen.EmitCall(OpCodes.Callvirt, clr.GetClrType(System.IO.Stream).GetMethod("get_Length"), ())
- gen.Emit(OpCodes.Newarr, clr.GetClrType(System.Byte))
- gen.Emit(OpCodes.Stloc, d)
- gen.Emit(OpCodes.Ldloc, s)
- gen.Emit(OpCodes.Ldloc, d)
- gen.Emit(OpCodes.Ldc_I4_0)
- gen.Emit(OpCodes.Ldloc, s)
- gen.EmitCall(OpCodes.Callvirt, clr.GetClrType(System.IO.Stream).GetMethod("get_Length"), ())
- gen.Emit(OpCodes.Conv_I4)
- gen.EmitCall(OpCodes.Callvirt, clr.GetClrType(System.IO.Stream).GetMethod("Read", (clr.GetClrType(System.Array[System.Byte]), int, int)), ())
- gen.Emit(OpCodes.Pop)
- gen.Emit(OpCodes.Ldloc, d)
- gen.EmitCall(OpCodes.Call, clr.GetClrType(Assembly).GetMethod("Load", (clr.GetClrType(System.Array[System.Byte]), )), ())
- gen.Emit(OpCodes.Ret)
-
- # generate a static constructor to assign the AssemblyResolve handler (otherwise it tries to use IronPython before it adds the handler)
- # the other way of handling this would be to move the call to InitializeModule into a separate method.
- staticConstructor = tb.DefineConstructor(MethodAttributes.Public | MethodAttributes.Static, CallingConventions.Standard, System.Type.EmptyTypes)
- gen = staticConstructor.GetILGenerator()
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.AppDomain).GetMethod("get_CurrentDomain"), ())
- gen.Emit(OpCodes.Ldnull)
- gen.Emit(OpCodes.Ldftn, assemblyResolveMethod)
- gen.Emit(OpCodes.Newobj, clr.GetClrType(System.ResolveEventHandler).GetConstructor((clr.GetClrType(System.Object), clr.GetClrType(System.IntPtr))))
- gen.EmitCall(OpCodes.Callvirt, clr.GetClrType(System.AppDomain).GetMethod("add_AssemblyResolve"), ())
- gen.Emit(OpCodes.Ret)
-
- mainMethod = tb.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static, int, ())
- if targetKind == System.Reflection.Emit.PEFileKinds.WindowApplication:
- mainMethod.SetCustomAttribute(clr.GetClrType(System.STAThreadAttribute).GetConstructor(()), System.Array[System.Byte](()))
- gen = mainMethod.GetILGenerator()
-
- # get the ScriptCode assembly...
- if embed:
- # put the generated DLL into the resources for the stub exe
- w = mb.DefineResource("IPDll.resources", "Embedded IronPython Generated DLL")
- w.AddResource("IPDll." + name, System.IO.File.ReadAllBytes(name + ".dll"))
- System.IO.File.Delete(name + ".dll")
-
- # generate code to load the resource
- gen.Emit(OpCodes.Ldstr, "IPDll")
- gen.EmitCall(OpCodes.Call, clr.GetClrType(Assembly).GetMethod("GetEntryAssembly"), ())
- gen.Emit(OpCodes.Newobj, clr.GetClrType(System.Resources.ResourceManager).GetConstructor((str, clr.GetClrType(Assembly))))
- gen.Emit(OpCodes.Ldstr, "IPDll." + name)
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.Resources.ResourceManager).GetMethod("GetObject", (str, )), ())
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.Reflection.Assembly).GetMethod("Load", (clr.GetClrType(System.Array[System.Byte]), )), ())
- else:
- # variables for saving original working directory und return code of script
- wdSave = gen.DeclareLocal(str)
-
- # save current working directory
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.Environment).GetMethod("get_CurrentDirectory"), ())
- gen.Emit(OpCodes.Stloc, wdSave)
- gen.EmitCall(OpCodes.Call, clr.GetClrType(Assembly).GetMethod("GetEntryAssembly"), ())
- gen.EmitCall(OpCodes.Callvirt, clr.GetClrType(Assembly).GetMethod("get_Location"), ())
- gen.Emit(OpCodes.Newobj, clr.GetClrType(System.IO.FileInfo).GetConstructor( (str, ) ))
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.IO.FileInfo).GetMethod("get_Directory"), ())
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.IO.DirectoryInfo).GetMethod("get_FullName"), ())
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.Environment).GetMethod("set_CurrentDirectory"), ())
- gen.Emit(OpCodes.Ldstr, name + ".dll")
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.IO.Path).GetMethod("GetFullPath", (clr.GetClrType(str), )), ())
- # result of GetFullPath stays on the stack during the restore of the
- # original working directory
-
- # restore original working directory
- gen.Emit(OpCodes.Ldloc, wdSave)
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.Environment).GetMethod("set_CurrentDirectory"), ())
-
- # for the LoadFile() call, the full path of the assembly is still is on the stack
- # as the result from the call to GetFullPath()
- gen.EmitCall(OpCodes.Call, clr.GetClrType(System.Reflection.Assembly).GetMethod("LoadFile", (clr.GetClrType(str), )), ())
-
- # emit module name
- gen.Emit(OpCodes.Ldstr, "__main__") # main module name
- gen.Emit(OpCodes.Ldnull) # no references
- gen.Emit(OpCodes.Ldc_I4_0) # don't ignore environment variables for engine startup
-
- # call InitializeModule
- # (this will also run the script)
- gen.EmitCall(OpCodes.Call, clr.GetClrType(PythonOps).GetMethod("InitializeModuleEx"), ())
- gen.Emit(OpCodes.Ret)
- tb.CreateType()
- ab.SetEntryPoint(mainMethod, targetKind)
- ab.Save(aName.Name + ".exe", platform, machine)
-
-def Main(args):
- files = []
- main = None # The main file to start the execution (passed to the PythonCompiler)
- main_name = None # File which will drive the name of the assembly if "output" not provided
- output = None # Output assembly name
- target = System.Reflection.Emit.PEFileKinds.Dll
- platform = System.Reflection.PortableExecutableKinds.ILOnly
- machine = System.Reflection.ImageFileMachine.I386
- embed = False # True to embed the generated DLL into the executable
- standalone = False # True to embed all the IronPython and Microsoft.Scripting DLL's into the generated exe
-
- for arg in args:
- if arg.startswith("/main:"):
- main_name = main = arg[6:]
- # only override the target kind if its current a DLL
- if target == System.Reflection.Emit.PEFileKinds.Dll:
- target = System.Reflection.Emit.PEFileKinds.ConsoleApplication
-
- elif arg.startswith("/out:"):
- output = arg[5:]
-
- elif arg.startswith("/target:"):
- tgt = arg[8:]
- if tgt == "exe": target = System.Reflection.Emit.PEFileKinds.ConsoleApplication
- elif tgt == "winexe": target = System.Reflection.Emit.PEFileKinds.WindowApplication
- else: target = System.Reflection.Emit.PEFileKinds.Dll
-
- elif arg.startswith("/platform:"):
- pform = arg[10:]
- if pform == "x86":
- platform = System.Reflection.PortableExecutableKinds.ILOnly | System.Reflection.PortableExecutableKinds.Required32Bit
- machine = System.Reflection.ImageFileMachine.I386
- elif pform == "x64":
- platform = System.Reflection.PortableExecutableKinds.ILOnly | System.Reflection.PortableExecutableKinds.PE32Plus
- machine = System.Reflection.ImageFileMachine.AMD64
- else:
- platform = System.Reflection.PortableExecutableKinds.ILOnly
- machine = System.Reflection.ImageFileMachine.I386
-
- elif arg.startswith("/embed"):
- embed = True
-
- elif arg.startswith("/standalone"):
- standalone = True
-
- elif arg.startswith("/files:"):
- with open(arg[7:], 'r') as ih:
- files+=[x[:-1] for x in ih.readlines()]
-
- elif arg in ["/?", "-?", "/h", "-h"]:
- print __doc__
- sys.exit(0)
-
- else:
- files.append(arg)
-
- if not files and not main_name:
- print __doc__
- sys.exit(0)
-
- if target != System.Reflection.Emit.PEFileKinds.Dll and main_name == None:
- print __doc__
- sys.exit(0)
- print "EXEs require /main:<filename> to be specified"
-
- if not output and main_name:
- output = System.IO.Path.GetFileNameWithoutExtension(main_name)
- elif not output and files:
- output = System.IO.Path.GetFileNameWithoutExtension(files[0])
-
- print "Input Files:"
- for file in files:
- print "\t%s" % file
-
- print "Output:\n\t%s" % output
- print "Target:\n\t%s" % target
- print "Platform:\n\t%s" % platform
- print "Machine:\n\t%s" % machine
-
- print "Compiling..."
- clr.CompileModules(output + ".dll", mainModule = main_name, *files)
-
- if target != System.Reflection.Emit.PEFileKinds.Dll:
- GenerateExe(output, target, platform, machine, main_name, embed, standalone)
-
- print "Saved to %s" % (output, )
-
-if __name__ == "__main__":
- Main(sys.argv[1:])
View
8 BEXML/libBEXML/__init__.py
@@ -1,8 +0,0 @@
-__all__ = ['bexml', 'coerce_datetime', 'comment', 'issue', 'parserbase', 'parsers', 'propertieddictionary']
-# Don't modify the line above, or this line!
-import automodinit
-automodinit.automodinit(__name__, __file__, globals())
-del automodinit
-
-# Put your normal __init__.py stuff here
-from bexml import BEXML
View
23 BEXML/libBEXML/bexml.py
@@ -1,23 +0,0 @@
-# BEXML, a fast Bugs Everywhere parser with RESTful API and other issue tracker backends
-# (C) 2012 Niall Douglas http://www.nedproductions.biz/
-# Created: March 2012
-
-import inspect, urlparse, logging, os
-import parsers
-
-log=logging.getLogger(__name__)
-
-def BEXML(uri, storageparser=None, **args):
- """Initialises an issue tracking repository for use"""
- if storageparser is None:
- parser_instances=[parser_module[1].instantiate(uri, **args) for parser_module in inspect.getmembers(parsers, inspect.ismodule)]
- parser_scores=[(instance.try_location(), instance) for instance in parser_instances]
- parser_scores.sort()
- score=parser_scores[len(parser_scores)-1][0]
- storageparser=parser_scores[len(parser_scores)-1][1]
- else:
- storageparser=storageparser(uri, **args)
- score=storageparser.try_location()
- if score[0]<0:
- raise Exception, "No storage parser matched the uri '"+uri+"'. The best matching ("+str(storageparser)+" reported: "+score[1]
- return storageparser
View
24 BEXML/libBEXML/coerce_datetime.py
@@ -1,24 +0,0 @@
-# BEXML, a fast Bugs Everywhere parser with RESTful API and other issue tracker backends
-# (C) 2012 Niall Douglas http://www.nedproductions.biz/
-# Created: March 2012
-
-import re
-from datetime import timedelta, datetime
-
-def coerce_datetime(x):
- if isinstance(x, datetime):
- return x
- if isinstance(x, str):
- if re.search("[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}", x):
- # ISO 8601 format
- return datetime.strptime(x, "%Y-%M-%d %H:%M:%S.%f %z")
- elif re.search(".{4} [0-9]+ .{3} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}", x):
- # BE format
- offset=int(x[-5:])
- delta=timedelta(hours=offset/100)
- ret=datetime.strptime(x[:-6], "%a, %d %b %Y %H:%M:%S")
- ret-=delta
- return ret
- else:
- raise Exception, "Unknown datetime string: '"+x+"'"
-
View
150 BEXML/libBEXML/comment.py
@@ -1,150 +0,0 @@
-# BEXML, a fast Bugs Everywhere parser with RESTful API and other issue tracker backends
-# (C) 2012 Niall Douglas http://www.nedproductions.biz/
-# Created: March 2012
-
-"""
-<bug>
- <uuid>12c986be-d19a-4b8b-b1b5-68248ff4d331</uuid>
- <short-name>bea/12c</short-name>
- <severity>wishlist</severity>
- <status>unconfirmed</status>
- <reporter>Ronny Pfannschmidt &lt;Ronny.Pfannschmidt@gmx.de&gt;</reporter>
- <creator>W. Trevor King &lt;wking@drexel.edu&gt;</creator>
- <created>Tue, 21 Jul 2009 18:32:12 +0000</created>
- <summary>Bug aggregation. Multi-repo meta-BE?</summary>
- <comment>
- <uuid>88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7</uuid>
- <alt-id>&lt;1247313294.7701.60.camel@localhost&gt;</alt-id>
- <short-name>bea/12c/88d</short-name>
- <author>Ronny Pfannschmidt &lt;Ronny.Pfannschmidt@gmx.de&gt;</author>
- <date>Sat, 11 Jul 2009 13:54:54 +0200</date>
- <content-type>text/plain</content-type>
- <body></body>
- </comment>
- <comment>
- <uuid>1f9f60de-ba37-42bc-a1c0-dc062ef255e1</uuid>
- <alt-id>&lt;878wivmjm1.fsf@benfinney.id.au&gt;</alt-id>
- <short-name>bea/12c/1f9</short-name>
- <in-reply-to>88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7</in-reply-to>
- <author>Ben Finney &lt;bignose+hates-spam@benfinney.id.au&gt;</author>
- <date>Sat, 11 Jul 2009 23:31:34 +1000</date>
- <content-type>text/plain</content-type>
- <body></body>
- </comment>
-</bug>
-"""
-
-from propertieddictionary import PropertiedDictionary
-from coerce_datetime import coerce_datetime
-
-from abc import ABCMeta, abstractmethod, abstractproperty
-from uuid import UUID
-from datetime import datetime
-import mimetypes
-
-# Add missing MIME types
-mimetypes.add_type("text/restructured", "rst", False)
-mimetypes.add_type("text/rst", "rst2", False)
-mimetypes.add_type("application/bat", "bat", False)
-
-class Comment(PropertiedDictionary):
- """Base class for comments"""
- __metaclass__=ABCMeta
- mime_types=mimetypes.types_map.values()
- mime_types+=mimetypes.common_types.values()
- mime_types.sort()
- mime_types=set(mime_types)
- nullUUID=UUID(int=0)
- nullDatetime=datetime.fromordinal(1)
-
- def __init__(self, parentIssue, *entries, **args):
- PropertiedDictionary.__init__(self)
- self.__parent=parentIssue
- self.__loaded=False
- self.__dirty=False
- self.__trackStaleness=False
- self._addProperty("uuid", "The uuid of the comment", lambda x: x if isinstance(x, UUID) else UUID(x), self.nullUUID)
- self._addProperty("alt-id", "The alt-id of the comment", str, "")
- self._addProperty("short-name", "The short name of the comment", str, "")
- self._addProperty("in-reply-to", "The uuid of the comment to which this comment replies", lambda x: x if isinstance(x, UUID) else UUID(x), self.nullUUID)
- self._addProperty("author", "The author of the comment", unicode, u"")
- self._addProperty("date", "When this comment was made", coerce_datetime, self.nullDatetime)
- self._addProperty("content-type", "The content type of this comment", self.__coerce_content_type, "text/plain")
- self._addProperty("body", "The body of this comment", unicode, u"")
- self._load(*entries, **args)
-
- def __coerce_content_type(self, type):
- """Checks that a mime type is valid"""
- type=str(type)
- assert type in self.mime_types
- return type
-
- @property
- def parentIssue(self):
- """Returns the issue to which this comment belongs"""
- return self.__parent
-
- @property
- def isLoaded(self):
- """True if comment has been loaded from backing store"""
- return self.__loaded
- @isLoaded.setter
- def isLoaded(self, value):
- self.__loaded=value
-
- @property
- def isDirty(self):
- """True if this comment has been modified and needs writing to disk"""
- return self.__dirty
- @isDirty.setter
- def isDirty(self, value):
- self.__dirty=value
-
- @property
- def tracksStaleness(self):
- """True is staleness is tracked"""
- return self.__trackStaleness
- @tracksStaleness.setter
- def tracksStaleness(self, value):
- self.__trackStaleness=value
-
- @abstractproperty
- def isStale(self):
- """True if the file backing for this comment is newer than us"""
- pass
-
- @abstractmethod
- def load(self, reload=False):
- """Loads in the comment from the backing store"""
- pass
-
- def __getitem__(self, name):
- if self._isProperty(name) and not self.isLoaded and name is not 'uuid':
- self.load()
- return PropertiedDictionary.__getitem__(self, name)
- def __getattr__(self, name):
- if self._isProperty(name) and not self.isLoaded:
- self.load()
- return PropertiedDictionary.__getattr__(self, name)
-
- def __setitem__(self, name, value):
- if self._isProperty(name) and not self.isLoaded:
- self.load()
- return PropertiedDictionary.__setitem__(self, name, value)
- def __setattr__(self, name, value):
- if self._isProperty(name) and not self.isLoaded:
- self.load()
- return PropertiedDictionary.__setattr__(self, name, value)
-
- def __delitem__(self, name):
- if self._isProperty(name) and not self.isLoaded:
- self.load()
- return PropertiedDictionary.__delitem__(self, name)
- def __delattr__(self, name):
- if self._isProperty(name) and not self.isLoaded:
- self.load()
- return PropertiedDictionary.__delattr__(self, name)
-
-if __name__=="__main__":
- import doctest
- doctest.testmod()
View
173 BEXML/libBEXML/issue.py
@@ -1,173 +0,0 @@
-# BEXML, a fast Bugs Everywhere parser with RESTful API and other issue tracker backends
-# (C) 2012 Niall Douglas http://www.nedproductions.biz/
-# Created: March 2012
-
-"""
-<bug>
- <uuid>12c986be-d19a-4b8b-b1b5-68248ff4d331</uuid>
- <short-name>bea/12c</short-name>
- <severity>wishlist</severity>
- <status>unconfirmed</status>
- <reporter>Ronny Pfannschmidt &lt;Ronny.Pfannschmidt@gmx.de&gt;</reporter>
- <creator>W. Trevor King &lt;wking@drexel.edu&gt;</creator>
- <created>Tue, 21 Jul 2009 18:32:12 +0000</created>
- <summary>Bug aggregation. Multi-repo meta-BE?</summary>
- <comment>
- <uuid>88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7</uuid>
- <alt-id>&lt;1247313294.7701.60.camel@localhost&gt;</alt-id>
- <short-name>bea/12c/88d</short-name>
- <author>Ronny Pfannschmidt &lt;Ronny.Pfannschmidt@gmx.de&gt;</author>
- <date>Sat, 11 Jul 2009 13:54:54 +0200</date>
- <content-type>text/plain</content-type>
- <body></body>
- </comment>
- <comment>
- <uuid>1f9f60de-ba37-42bc-a1c0-dc062ef255e1</uuid>
- <alt-id>&lt;878wivmjm1.fsf@benfinney.id.au&gt;</alt-id>
- <short-name>bea/12c/1f9</short-name>
- <in-reply-to>88d1f2c2-e1af-4f0d-9390-e3c89ae4f7d7</in-reply-to>
- <author>Ben Finney &lt;bignose+hates-spam@benfinney.id.au&gt;</author>
- <date>Sat, 11 Jul 2009 23:31:34 +1000</date>
- <content-type>text/plain</content-type>
- <body></body>
- </comment>
-</bug>
-"""
-
-from abc import ABCMeta, abstractmethod, abstractproperty
-from uuid import UUID
-from datetime import datetime
-
-from propertieddictionary import PropertiedDictionary
-from comment import Comment
-from coerce_datetime import coerce_datetime
-
-class Issue(PropertiedDictionary):
- """Abstract base class for issues"""
- __metaclass__=ABCMeta
- severities=["target",
- "wishlist",
- "minor",
- "serious",
- "critical",
- "fatal"]
- statuses=["unconfirmed",
- "open",
- "assigned",
- "test",
- "closed",
- "fixed",
- "wontfix"]
- nullUUID=UUID(int=0)
- nullDatetime=datetime.fromordinal(1)
-
- def __init__(self, *entries, **args):
- PropertiedDictionary.__init__(self)
- self.__loaded=False
- self.__dirty=False
- self.__trackStaleness=False
- self._addProperty("uuid", "The uuid of the issue", lambda x: x if isinstance(x, UUID) else UUID(x), self.nullUUID)
- self._addProperty("short-name", "The short name of the issue", str, "")
- self._addProperty("severity", "The severity of the issue", self.__coerce_severity, "")
- self._addProperty("status", "The status of the issue", self.__coerce_status, "")
- self._addProperty("reporter", "The reporter of the issue", unicode, u"")
- self._addProperty("creator", "The creator of the issue", unicode, u"")
- self._addProperty("assigned", "The person assigned to the issue", unicode, u"")
- self._addProperty("time", "When this issue was created", coerce_datetime, self.nullDatetime)
- self._addProperty("extra-strings", "Additional tags on the issue", str, "")
- self._addProperty("summary", "Summary of the issue", unicode, u"")
- self.comments={}
- self._load(*entries, **args)
-
- def __coerce_severity(self, v):
- v=str(v)
- assert v=="" or v in self.severities
- return v
-
- def __coerce_status(self, v):
- v=str(v)
- assert v=="" or v in self.statuses
- return v
-
- @property
- def isLoaded(self):
- """True if issue has been loaded from filing system"""
- return self.__loaded
- @isLoaded.setter
- def isLoaded(self, value):
- self.__loaded=value
-
- @property
- def isDirty(self):
- """True if this comment has been modified and needs writing to disk"""
- return self.__dirty
- @isDirty.setter
- def isDirty(self, value):
- self.__dirty=value
-
- @property
- def tracksStaleness(self):
- """True is staleness is tracked"""
- return self.__trackStaleness
- @tracksStaleness.setter
- def tracksStaleness(self, value):
- self.__trackStaleness=value
-
- @abstractproperty
- def isStale(self):
- """True if the backing for this issue is newer than us"""
- pass
-
- def addComment(self, comment):
- """Adds a comment to the issue"""
- assert isinstance(comment, Comment)
- self.comments[comment.uuid]=comment
- return comment
-
- def removeComment(self, comment):
- """Removes a comment from the issue"""
- if isinstance(comment, str):
- comment=UUID(comment)
- if isinstance(comment, UUID):
- del self.comments[comment]
- elif isinstance(comment, Comment):
- del self.comments[comment.uuid]
- else:
- raise LookupError, "comment is not a string, uuid or comment"
-
- @abstractmethod
- def load(self, reload=False):
- """Loads in the issue from the backing store"""
- pass
-
- def __getitem__(self, name):
- if self._isProperty(name) and not self.isLoaded and name is not 'uuid':
- self.load()
- return PropertiedDictionary.__getitem__(self, name)
- def __getattr__(self, name):
- if self._isProperty(name) and not self.isLoaded:
- self.load()
- return PropertiedDictionary.__getattr__(self, name)
-
- def __setitem__(self, name, value):