wipo-gbd-transformation 1.1.105__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. gbdtransformation/__init__.py +0 -0
  2. gbdtransformation/brands/__init__.py +44 -0
  3. gbdtransformation/brands/aetm/__init__.py +5 -0
  4. gbdtransformation/brands/aetm/filters.py +84 -0
  5. gbdtransformation/brands/aetm/schema +87 -0
  6. gbdtransformation/brands/aetm/template.yml +1 -0
  7. gbdtransformation/brands/aetm/tests/__init__.py +0 -0
  8. gbdtransformation/brands/altm/__init__.py +6 -0
  9. gbdtransformation/brands/altm/filters.py +107 -0
  10. gbdtransformation/brands/altm/schema +83 -0
  11. gbdtransformation/brands/altm/template.yml +1 -0
  12. gbdtransformation/brands/altm/tests/__init__.py +0 -0
  13. gbdtransformation/brands/altm/tests/altm.xml +93 -0
  14. gbdtransformation/brands/aptm/__init__.py +15 -0
  15. gbdtransformation/brands/aptm/filters.py +80 -0
  16. gbdtransformation/brands/aptm/schema +87 -0
  17. gbdtransformation/brands/aptm/template.yml +1 -0
  18. gbdtransformation/brands/aptm/tests/__init__.py +0 -0
  19. gbdtransformation/brands/attm/__init__.py +6 -0
  20. gbdtransformation/brands/attm/filters.py +76 -0
  21. gbdtransformation/brands/attm/schema +52 -0
  22. gbdtransformation/brands/attm/template.yml +85 -0
  23. gbdtransformation/brands/autm/__init__.py +2 -0
  24. gbdtransformation/brands/autm/filters.py +222 -0
  25. gbdtransformation/brands/autm/schema +91 -0
  26. gbdtransformation/brands/autm/template.yml +157 -0
  27. gbdtransformation/brands/bgtm/__init__.py +5 -0
  28. gbdtransformation/brands/bgtm/filters.py +112 -0
  29. gbdtransformation/brands/bgtm/schema +314 -0
  30. gbdtransformation/brands/bgtm/template.yml +154 -0
  31. gbdtransformation/brands/bhtm/__init__.py +12 -0
  32. gbdtransformation/brands/bhtm/filters.py +87 -0
  33. gbdtransformation/brands/bhtm/schema +87 -0
  34. gbdtransformation/brands/bhtm/template.yml +1 -0
  35. gbdtransformation/brands/bhtm/tests/__init__.py +0 -0
  36. gbdtransformation/brands/bntm/__init__.py +2 -0
  37. gbdtransformation/brands/bntm/filters.py +75 -0
  38. gbdtransformation/brands/bntm/schema +87 -0
  39. gbdtransformation/brands/bntm/template.yml +1 -0
  40. gbdtransformation/brands/bntm/tests/__init__.py +0 -0
  41. gbdtransformation/brands/brtm/__init__.py +3 -0
  42. gbdtransformation/brands/brtm/filters.py +169 -0
  43. gbdtransformation/brands/brtm/schema +86 -0
  44. gbdtransformation/brands/brtm/template.yml +22 -0
  45. gbdtransformation/brands/brtm/tests/__init__.py +0 -0
  46. gbdtransformation/brands/brtm/tests/test01.xml +53 -0
  47. gbdtransformation/brands/bttm/__init__.py +10 -0
  48. gbdtransformation/brands/bttm/filters.py +80 -0
  49. gbdtransformation/brands/bttm/schema +87 -0
  50. gbdtransformation/brands/bttm/template.yml +1 -0
  51. gbdtransformation/brands/bttm/tests/__init__.py +0 -0
  52. gbdtransformation/brands/bwtm/__init__.py +13 -0
  53. gbdtransformation/brands/bwtm/filters.py +90 -0
  54. gbdtransformation/brands/bwtm/schema +87 -0
  55. gbdtransformation/brands/bwtm/template.yml +1 -0
  56. gbdtransformation/brands/bwtm/tests/__init__.py +0 -0
  57. gbdtransformation/brands/bztm/__init__.py +16 -0
  58. gbdtransformation/brands/bztm/filters.py +77 -0
  59. gbdtransformation/brands/bztm/schema +87 -0
  60. gbdtransformation/brands/bztm/template.yml +1 -0
  61. gbdtransformation/brands/bztm/tests/__init__.py +0 -0
  62. gbdtransformation/brands/catm/__init__.py +10 -0
  63. gbdtransformation/brands/catm/filters.py +272 -0
  64. gbdtransformation/brands/catm/schema +804 -0
  65. gbdtransformation/brands/catm/template.yml +230 -0
  66. gbdtransformation/brands/chtm/__init__.py +6 -0
  67. gbdtransformation/brands/chtm/filters.py +161 -0
  68. gbdtransformation/brands/chtm/schema +79 -0
  69. gbdtransformation/brands/chtm/template.yml +121 -0
  70. gbdtransformation/brands/cltm/__init__.py +2 -0
  71. gbdtransformation/brands/cltm/filters.py +80 -0
  72. gbdtransformation/brands/cltm/schema +86 -0
  73. gbdtransformation/brands/cltm/template.yml +1 -0
  74. gbdtransformation/brands/cltm/tests/__init__.py +0 -0
  75. gbdtransformation/brands/crtm/__init__.py +5 -0
  76. gbdtransformation/brands/crtm/filters.py +196 -0
  77. gbdtransformation/brands/crtm/schema +86 -0
  78. gbdtransformation/brands/crtm/template.yml +1 -0
  79. gbdtransformation/brands/crtm/tests/__init__.py +0 -0
  80. gbdtransformation/brands/cutm/__init__.py +10 -0
  81. gbdtransformation/brands/cutm/filters.py +94 -0
  82. gbdtransformation/brands/cutm/schema +86 -0
  83. gbdtransformation/brands/cutm/template.yml +4 -0
  84. gbdtransformation/brands/cutm/tests/__init__.py +0 -0
  85. gbdtransformation/brands/detm/__init__.py +19 -0
  86. gbdtransformation/brands/detm/filters.py +75 -0
  87. gbdtransformation/brands/detm/schema +511 -0
  88. gbdtransformation/brands/detm/template.yml +151 -0
  89. gbdtransformation/brands/dktm/__init__.py +7 -0
  90. gbdtransformation/brands/dktm/filters.py +90 -0
  91. gbdtransformation/brands/dktm/schema +95 -0
  92. gbdtransformation/brands/dktm/template.yml +114 -0
  93. gbdtransformation/brands/dztm/__init__.py +10 -0
  94. gbdtransformation/brands/dztm/filters.py +81 -0
  95. gbdtransformation/brands/dztm/schema +87 -0
  96. gbdtransformation/brands/dztm/template.yml +1 -0
  97. gbdtransformation/brands/dztm/tests/__init__.py +0 -0
  98. gbdtransformation/brands/eetm/__init__.py +8 -0
  99. gbdtransformation/brands/eetm/filters.py +115 -0
  100. gbdtransformation/brands/eetm/schema +48 -0
  101. gbdtransformation/brands/eetm/template.yml +98 -0
  102. gbdtransformation/brands/egtm/__init__.py +5 -0
  103. gbdtransformation/brands/egtm/filters.py +73 -0
  104. gbdtransformation/brands/egtm/schema +87 -0
  105. gbdtransformation/brands/egtm/template.yml +1 -0
  106. gbdtransformation/brands/egtm/tests/__init__.py +0 -0
  107. gbdtransformation/brands/emtm/__init__.py +3 -0
  108. gbdtransformation/brands/emtm/filters.py +96 -0
  109. gbdtransformation/brands/emtm/schema +314 -0
  110. gbdtransformation/brands/emtm/template.yml +125 -0
  111. gbdtransformation/brands/estm/__init__.py +3 -0
  112. gbdtransformation/brands/estm/filters.py +110 -0
  113. gbdtransformation/brands/estm/schema +99 -0
  114. gbdtransformation/brands/estm/template.yml +144 -0
  115. gbdtransformation/brands/filters.py +125 -0
  116. gbdtransformation/brands/frtm/__init__.py +2 -0
  117. gbdtransformation/brands/frtm/filters.py +172 -0
  118. gbdtransformation/brands/frtm/schema +300 -0
  119. gbdtransformation/brands/frtm/template.yml +203 -0
  120. gbdtransformation/brands/gbtm/__init__.py +3 -0
  121. gbdtransformation/brands/gbtm/filters.py +122 -0
  122. gbdtransformation/brands/gbtm/schema +362 -0
  123. gbdtransformation/brands/gbtm/template.yml +147 -0
  124. gbdtransformation/brands/gdtm/__init__.py +5 -0
  125. gbdtransformation/brands/gdtm/filters.py +68 -0
  126. gbdtransformation/brands/gdtm/schema +87 -0
  127. gbdtransformation/brands/gdtm/template.yml +1 -0
  128. gbdtransformation/brands/gdtm/tests/__init__.py +0 -0
  129. gbdtransformation/brands/getm/__init__.py +3 -0
  130. gbdtransformation/brands/getm/filters.py +68 -0
  131. gbdtransformation/brands/getm/schema +209 -0
  132. gbdtransformation/brands/getm/template.yml +142 -0
  133. gbdtransformation/brands/ghtm/__init__.py +12 -0
  134. gbdtransformation/brands/ghtm/filters.py +74 -0
  135. gbdtransformation/brands/ghtm/schema +86 -0
  136. gbdtransformation/brands/ghtm/template.yml +1 -0
  137. gbdtransformation/brands/ghtm/tests/__init__.py +0 -0
  138. gbdtransformation/brands/gmtm/__init__.py +7 -0
  139. gbdtransformation/brands/gmtm/filters.py +70 -0
  140. gbdtransformation/brands/gmtm/schema +86 -0
  141. gbdtransformation/brands/gmtm/template.yml +1 -0
  142. gbdtransformation/brands/gmtm/tests/__init__.py +0 -0
  143. gbdtransformation/brands/gstm/__init__.py +2 -0
  144. gbdtransformation/brands/gstm/filters.py +75 -0
  145. gbdtransformation/brands/gstm/template.gs.yml +56 -0
  146. gbdtransformation/brands/gstm/template.yml +32 -0
  147. gbdtransformation/brands/hrtm/__init__.py +3 -0
  148. gbdtransformation/brands/hrtm/filters.py +158 -0
  149. gbdtransformation/brands/hrtm/schema +43 -0
  150. gbdtransformation/brands/hrtm/template.yml +205 -0
  151. gbdtransformation/brands/idtm/__init__.py +12 -0
  152. gbdtransformation/brands/idtm/filters.py +95 -0
  153. gbdtransformation/brands/idtm/schema +86 -0
  154. gbdtransformation/brands/idtm/template.yml +1 -0
  155. gbdtransformation/brands/idtm/tests/__init__.py +0 -0
  156. gbdtransformation/brands/idtm/tests/translation.xml +106 -0
  157. gbdtransformation/brands/idtm/tests/unicode.xml +120 -0
  158. gbdtransformation/brands/iltm/__init__.py +2 -0
  159. gbdtransformation/brands/iltm/filters.py +91 -0
  160. gbdtransformation/brands/iltm/schema +87 -0
  161. gbdtransformation/brands/iltm/template.yml +213 -0
  162. gbdtransformation/brands/iltm/tests/__init__.py +0 -0
  163. gbdtransformation/brands/iltm/tests/cancellations.xml +156 -0
  164. gbdtransformation/brands/iltm/tests/collcert.xml +51 -0
  165. gbdtransformation/brands/iltm/tests/eventdata.xml +83 -0
  166. gbdtransformation/brands/iltm/tests/international.xml +80 -0
  167. gbdtransformation/brands/iltm/tests/markfeature.xml +117 -0
  168. gbdtransformation/brands/iltm/tests/noevents.xml +44 -0
  169. gbdtransformation/brands/iltm/tests/opposition.xml +147 -0
  170. gbdtransformation/brands/iltm/tests/tlit.xml +77 -0
  171. gbdtransformation/brands/intm/__init__.py +6 -0
  172. gbdtransformation/brands/intm/filters.py +75 -0
  173. gbdtransformation/brands/intm/schema +127 -0
  174. gbdtransformation/brands/intm/template.yml +112 -0
  175. gbdtransformation/brands/ipas/__init__.py +0 -0
  176. gbdtransformation/brands/ipas/filters.py +203 -0
  177. gbdtransformation/brands/ipas/template.yml +185 -0
  178. gbdtransformation/brands/istm/__init__.py +10 -0
  179. gbdtransformation/brands/istm/filters.py +60 -0
  180. gbdtransformation/brands/istm/schema +53 -0
  181. gbdtransformation/brands/istm/template.yml +119 -0
  182. gbdtransformation/brands/ittm/__init__.py +6 -0
  183. gbdtransformation/brands/ittm/filters.py +114 -0
  184. gbdtransformation/brands/ittm/schema +104 -0
  185. gbdtransformation/brands/ittm/template.yml +107 -0
  186. gbdtransformation/brands/jotm/__init__.py +8 -0
  187. gbdtransformation/brands/jotm/filters.py +61 -0
  188. gbdtransformation/brands/jotm/schema +86 -0
  189. gbdtransformation/brands/jotm/template.yml +1 -0
  190. gbdtransformation/brands/jotm/tests/__init__.py +0 -0
  191. gbdtransformation/brands/jotm/tests/test.xml +84 -0
  192. gbdtransformation/brands/jptm/__init__.py +6 -0
  193. gbdtransformation/brands/jptm/filters.py +79 -0
  194. gbdtransformation/brands/jptm/schema +39 -0
  195. gbdtransformation/brands/jptm/template.yml +113 -0
  196. gbdtransformation/brands/ketm/__init__.py +9 -0
  197. gbdtransformation/brands/ketm/filters.py +77 -0
  198. gbdtransformation/brands/ketm/schema +86 -0
  199. gbdtransformation/brands/ketm/template.yml +1 -0
  200. gbdtransformation/brands/ketm/tests/__init__.py +0 -0
  201. gbdtransformation/brands/kgtm/__init__.py +6 -0
  202. gbdtransformation/brands/kgtm/filters.py +67 -0
  203. gbdtransformation/brands/kgtm/schema +27 -0
  204. gbdtransformation/brands/kgtm/template.yml +58 -0
  205. gbdtransformation/brands/khtm/__init__.py +14 -0
  206. gbdtransformation/brands/khtm/filters.py +134 -0
  207. gbdtransformation/brands/khtm/schema +86 -0
  208. gbdtransformation/brands/khtm/template.yml +1 -0
  209. gbdtransformation/brands/khtm/tests/__init__.py +0 -0
  210. gbdtransformation/brands/khtm/tests/khtm.xml +122 -0
  211. gbdtransformation/brands/krtm/__init__.py +6 -0
  212. gbdtransformation/brands/krtm/filters.py +136 -0
  213. gbdtransformation/brands/krtm/schema +179 -0
  214. gbdtransformation/brands/krtm/template.yml +186 -0
  215. gbdtransformation/brands/kwtm/__init__.py +2 -0
  216. gbdtransformation/brands/kwtm/filters.py +69 -0
  217. gbdtransformation/brands/kwtm/schema +86 -0
  218. gbdtransformation/brands/kwtm/template.yml +1 -0
  219. gbdtransformation/brands/kwtm/tests/__init__.py +0 -0
  220. gbdtransformation/brands/kwtm/tests/test.xml +84 -0
  221. gbdtransformation/brands/kztm/__init__.py +242 -0
  222. gbdtransformation/brands/kztm/filters.py +140 -0
  223. gbdtransformation/brands/kztm/schema +36 -0
  224. gbdtransformation/brands/kztm/template.yml +117 -0
  225. gbdtransformation/brands/latm/__init__.py +7 -0
  226. gbdtransformation/brands/latm/filters.py +93 -0
  227. gbdtransformation/brands/latm/schema +86 -0
  228. gbdtransformation/brands/latm/template.yml +1 -0
  229. gbdtransformation/brands/latm/tests/__init__.py +0 -0
  230. gbdtransformation/brands/latm/tests/test.xml +112 -0
  231. gbdtransformation/brands/lktm/__init__.py +5 -0
  232. gbdtransformation/brands/lktm/filters.py +83 -0
  233. gbdtransformation/brands/lktm/schema +87 -0
  234. gbdtransformation/brands/lktm/template.yml +1 -0
  235. gbdtransformation/brands/lktm/tests/__init__.py +0 -0
  236. gbdtransformation/brands/matm/__init__.py +3 -0
  237. gbdtransformation/brands/matm/filters.py +36 -0
  238. gbdtransformation/brands/matm/schema +33 -0
  239. gbdtransformation/brands/matm/template.yml +72 -0
  240. gbdtransformation/brands/mctm/__init__.py +3 -0
  241. gbdtransformation/brands/mctm/filters.py +65 -0
  242. gbdtransformation/brands/mctm/schema +128 -0
  243. gbdtransformation/brands/mctm/template.yml +122 -0
  244. gbdtransformation/brands/mdtm/__init__.py +3 -0
  245. gbdtransformation/brands/mdtm/filters.py +64 -0
  246. gbdtransformation/brands/mdtm/schema +128 -0
  247. gbdtransformation/brands/mdtm/template.yml +122 -0
  248. gbdtransformation/brands/metm/__init__.py +5 -0
  249. gbdtransformation/brands/metm/filters.py +87 -0
  250. gbdtransformation/brands/metm/schema +87 -0
  251. gbdtransformation/brands/metm/template.yml +1 -0
  252. gbdtransformation/brands/metm/tests/__init__.py +0 -0
  253. gbdtransformation/brands/mgtm/__init__.py +7 -0
  254. gbdtransformation/brands/mgtm/filters.py +73 -0
  255. gbdtransformation/brands/mgtm/schema +86 -0
  256. gbdtransformation/brands/mgtm/template.yml +1 -0
  257. gbdtransformation/brands/mgtm/tests/__init__.py +0 -0
  258. gbdtransformation/brands/mgtm/tests/test.xml +107 -0
  259. gbdtransformation/brands/mktm/__init__.py +6 -0
  260. gbdtransformation/brands/mktm/filters.py +63 -0
  261. gbdtransformation/brands/mktm/schema +80 -0
  262. gbdtransformation/brands/mktm/template.yml +112 -0
  263. gbdtransformation/brands/mntm/__init__.py +11 -0
  264. gbdtransformation/brands/mntm/filters.py +99 -0
  265. gbdtransformation/brands/mntm/schema +86 -0
  266. gbdtransformation/brands/mntm/template.yml +1 -0
  267. gbdtransformation/brands/mntm/tests/__init__.py +0 -0
  268. gbdtransformation/brands/mwtm/__init__.py +11 -0
  269. gbdtransformation/brands/mwtm/filters.py +80 -0
  270. gbdtransformation/brands/mwtm/schema +86 -0
  271. gbdtransformation/brands/mwtm/template.yml +1 -0
  272. gbdtransformation/brands/mwtm/tests/__init__.py +0 -0
  273. gbdtransformation/brands/mxtm/__init__.py +6 -0
  274. gbdtransformation/brands/mxtm/filters.py +77 -0
  275. gbdtransformation/brands/mxtm/schema +81 -0
  276. gbdtransformation/brands/mxtm/template.yml +127 -0
  277. gbdtransformation/brands/mytm/__init__.py +17 -0
  278. gbdtransformation/brands/mytm/filters.py +125 -0
  279. gbdtransformation/brands/mytm/schema +86 -0
  280. gbdtransformation/brands/mytm/template.yml +1 -0
  281. gbdtransformation/brands/mytm/tests/__init__.py +0 -0
  282. gbdtransformation/brands/mytm/tests/example.xml +132 -0
  283. gbdtransformation/brands/mytm/tests/mytm.xml +132 -0
  284. gbdtransformation/brands/mztm/__init__.py +14 -0
  285. gbdtransformation/brands/mztm/filters.py +89 -0
  286. gbdtransformation/brands/mztm/schema +86 -0
  287. gbdtransformation/brands/mztm/template.yml +1 -0
  288. gbdtransformation/brands/mztm/tests/__init__.py +0 -0
  289. gbdtransformation/brands/natm/__init__.py +11 -0
  290. gbdtransformation/brands/natm/filters.py +88 -0
  291. gbdtransformation/brands/natm/schema +86 -0
  292. gbdtransformation/brands/natm/template.yml +1 -0
  293. gbdtransformation/brands/natm/tests/__init__.py +0 -0
  294. gbdtransformation/brands/notm/__init__.py +5 -0
  295. gbdtransformation/brands/notm/filters.py +170 -0
  296. gbdtransformation/brands/notm/template.yml +289 -0
  297. gbdtransformation/brands/nztm/__init__.py +3 -0
  298. gbdtransformation/brands/nztm/filters.py +126 -0
  299. gbdtransformation/brands/nztm/schema +197 -0
  300. gbdtransformation/brands/nztm/template.yml +161 -0
  301. gbdtransformation/brands/oatm/__init__.py +18 -0
  302. gbdtransformation/brands/oatm/filters.py +82 -0
  303. gbdtransformation/brands/oatm/schema +87 -0
  304. gbdtransformation/brands/oatm/template.yml +1 -0
  305. gbdtransformation/brands/oatm/tests/__init__.py +0 -0
  306. gbdtransformation/brands/omtm/__init__.py +5 -0
  307. gbdtransformation/brands/omtm/filters.py +60 -0
  308. gbdtransformation/brands/omtm/schema +86 -0
  309. gbdtransformation/brands/omtm/template.yml +1 -0
  310. gbdtransformation/brands/omtm/tests/__init__.py +0 -0
  311. gbdtransformation/brands/omtm/tests/test.xml +84 -0
  312. gbdtransformation/brands/patm/__init__.py +8 -0
  313. gbdtransformation/brands/patm/filters.py +149 -0
  314. gbdtransformation/brands/patm/template.yml +40 -0
  315. gbdtransformation/brands/petm/__init__.py +6 -0
  316. gbdtransformation/brands/petm/filters.py +90 -0
  317. gbdtransformation/brands/petm/schema +114 -0
  318. gbdtransformation/brands/petm/template.yml +143 -0
  319. gbdtransformation/brands/pgtm/__init__.py +5 -0
  320. gbdtransformation/brands/pgtm/filters.py +76 -0
  321. gbdtransformation/brands/pgtm/schema +86 -0
  322. gbdtransformation/brands/pgtm/template.yml +1 -0
  323. gbdtransformation/brands/pgtm/tests/__init__.py +0 -0
  324. gbdtransformation/brands/pgtm/tests/pgtm.xml +128 -0
  325. gbdtransformation/brands/phtm/__init__.py +14 -0
  326. gbdtransformation/brands/phtm/filters.py +169 -0
  327. gbdtransformation/brands/phtm/schema +79 -0
  328. gbdtransformation/brands/phtm/schema.classic +50 -0
  329. gbdtransformation/brands/phtm/template.classic.yml +102 -0
  330. gbdtransformation/brands/phtm/template.yml +189 -0
  331. gbdtransformation/brands/pttm/__init__.py +0 -0
  332. gbdtransformation/brands/pttm/filters.py +0 -0
  333. gbdtransformation/brands/pttm/schema +0 -0
  334. gbdtransformation/brands/pttm/template.yml +0 -0
  335. gbdtransformation/brands/pytm/__init__.py +6 -0
  336. gbdtransformation/brands/pytm/filters.py +136 -0
  337. gbdtransformation/brands/pytm/template.yml +40 -0
  338. gbdtransformation/brands/qatm/__init__.py +5 -0
  339. gbdtransformation/brands/qatm/filters.py +81 -0
  340. gbdtransformation/brands/qatm/schema +87 -0
  341. gbdtransformation/brands/qatm/template.yml +1 -0
  342. gbdtransformation/brands/qatm/tests/__init__.py +0 -0
  343. gbdtransformation/brands/rotm/__init__.py +3 -0
  344. gbdtransformation/brands/rotm/filters.py +82 -0
  345. gbdtransformation/brands/rotm/schema +128 -0
  346. gbdtransformation/brands/rotm/template.yml +121 -0
  347. gbdtransformation/brands/rstm/__init__.py +5 -0
  348. gbdtransformation/brands/rstm/filters.py +88 -0
  349. gbdtransformation/brands/rstm/schema +86 -0
  350. gbdtransformation/brands/rstm/template.yml +1 -0
  351. gbdtransformation/brands/rstm/tests/__init__.py +0 -0
  352. gbdtransformation/brands/rutm/__init__.py +14 -0
  353. gbdtransformation/brands/rutm/filters.py +82 -0
  354. gbdtransformation/brands/rutm/schema +94 -0
  355. gbdtransformation/brands/rutm/template.yml +105 -0
  356. gbdtransformation/brands/sdtm/__init__.py +5 -0
  357. gbdtransformation/brands/sdtm/filters.py +59 -0
  358. gbdtransformation/brands/sdtm/schema +86 -0
  359. gbdtransformation/brands/sdtm/template.yml +1 -0
  360. gbdtransformation/brands/sdtm/tests/__init__.py +0 -0
  361. gbdtransformation/brands/sdtm/tests/test.xml +84 -0
  362. gbdtransformation/brands/sgtm/__init__.py +16 -0
  363. gbdtransformation/brands/sgtm/filters.py +177 -0
  364. gbdtransformation/brands/sgtm/schema +213 -0
  365. gbdtransformation/brands/sgtm/template.article6ter.yml +48 -0
  366. gbdtransformation/brands/sgtm/template.r13.yml +45 -0
  367. gbdtransformation/brands/sgtm/template.trademark.yml +148 -0
  368. gbdtransformation/brands/sgtm/template.yml +9 -0
  369. gbdtransformation/brands/smtm/__init__.py +6 -0
  370. gbdtransformation/brands/smtm/filters.py +77 -0
  371. gbdtransformation/brands/smtm/schema +86 -0
  372. gbdtransformation/brands/smtm/template.yml +1 -0
  373. gbdtransformation/brands/smtm/tests/__init__.py +0 -0
  374. gbdtransformation/brands/smtm/tests/test.xml +133 -0
  375. gbdtransformation/brands/solrjtm/__init__.py +1 -0
  376. gbdtransformation/brands/solrjtm/filters.py +85 -0
  377. gbdtransformation/brands/solrjtm/template.yml +195 -0
  378. gbdtransformation/brands/st66tm/__init__.py +1 -0
  379. gbdtransformation/brands/st66tm/filters.py +33 -0
  380. gbdtransformation/brands/st66tm/st66tm.tmpl +219 -0
  381. gbdtransformation/brands/sttm/__init__.py +18 -0
  382. gbdtransformation/brands/sttm/filters.py +72 -0
  383. gbdtransformation/brands/sttm/schema +83 -0
  384. gbdtransformation/brands/sttm/template.yml +1 -0
  385. gbdtransformation/brands/sttm/tests/__init__.py +0 -0
  386. gbdtransformation/brands/sztm/__init__.py +14 -0
  387. gbdtransformation/brands/sztm/filters.py +72 -0
  388. gbdtransformation/brands/sztm/schema +86 -0
  389. gbdtransformation/brands/sztm/template.yml +1 -0
  390. gbdtransformation/brands/sztm/tests/__init__.py +0 -0
  391. gbdtransformation/brands/thtm/__init__.py +2 -0
  392. gbdtransformation/brands/thtm/filters.py +86 -0
  393. gbdtransformation/brands/thtm/schema +86 -0
  394. gbdtransformation/brands/thtm/template.yml +175 -0
  395. gbdtransformation/brands/thtm/tests/__init__.py +0 -0
  396. gbdtransformation/brands/thtm/tests/test.xml +84 -0
  397. gbdtransformation/brands/tntm/__init__.py +16 -0
  398. gbdtransformation/brands/tntm/filters.py +89 -0
  399. gbdtransformation/brands/tntm/schema +87 -0
  400. gbdtransformation/brands/tntm/template.yml +1 -0
  401. gbdtransformation/brands/tntm/tests/__init__.py +0 -0
  402. gbdtransformation/brands/totm/__init__.py +5 -0
  403. gbdtransformation/brands/totm/filters.py +72 -0
  404. gbdtransformation/brands/totm/schema +86 -0
  405. gbdtransformation/brands/totm/template.yml +1 -0
  406. gbdtransformation/brands/totm/tests/__init__.py +0 -0
  407. gbdtransformation/brands/totm/tests/nofeature.xml +106 -0
  408. gbdtransformation/brands/totm/tests/syntax.xml +162 -0
  409. gbdtransformation/brands/totm/tests/test.xml +84 -0
  410. gbdtransformation/brands/tttm/__init__.py +17 -0
  411. gbdtransformation/brands/tttm/filters.py +79 -0
  412. gbdtransformation/brands/tttm/schema +87 -0
  413. gbdtransformation/brands/tttm/template.yml +1 -0
  414. gbdtransformation/brands/tttm/tests/__init__.py +0 -0
  415. gbdtransformation/brands/uatm/__init__.py +18 -0
  416. gbdtransformation/brands/uatm/filters.py +70 -0
  417. gbdtransformation/brands/uatm/schema +158 -0
  418. gbdtransformation/brands/uatm/template.yml +148 -0
  419. gbdtransformation/brands/ustm/__init__.py +187 -0
  420. gbdtransformation/brands/ustm/filters.py +227 -0
  421. gbdtransformation/brands/ustm/schema +2183 -0
  422. gbdtransformation/brands/ustm/template.yml +219 -0
  423. gbdtransformation/brands/uytm/__init__.py +3 -0
  424. gbdtransformation/brands/uytm/filters.py +64 -0
  425. gbdtransformation/brands/uytm/schema +106 -0
  426. gbdtransformation/brands/uytm/template.yml +137 -0
  427. gbdtransformation/brands/vctm/__init__.py +5 -0
  428. gbdtransformation/brands/vctm/filters.py +75 -0
  429. gbdtransformation/brands/vctm/schema +87 -0
  430. gbdtransformation/brands/vctm/template.yml +1 -0
  431. gbdtransformation/brands/vctm/tests/__init__.py +0 -0
  432. gbdtransformation/brands/vntm/__init__.py +9 -0
  433. gbdtransformation/brands/vntm/filters.py +84 -0
  434. gbdtransformation/brands/vntm/schema +86 -0
  435. gbdtransformation/brands/vntm/template.yml +1 -0
  436. gbdtransformation/brands/vntm/tests/__init__.py +0 -0
  437. gbdtransformation/brands/vutm/__init__.py +5 -0
  438. gbdtransformation/brands/vutm/filters.py +67 -0
  439. gbdtransformation/brands/vutm/schema +83 -0
  440. gbdtransformation/brands/vutm/template.yml +1 -0
  441. gbdtransformation/brands/vutm/tests/__init__.py +0 -0
  442. gbdtransformation/brands/whoinn/__init__.py +6 -0
  443. gbdtransformation/brands/whoinn/filters.py +46 -0
  444. gbdtransformation/brands/whoinn/schema +4 -0
  445. gbdtransformation/brands/whoinn/template.yml +45 -0
  446. gbdtransformation/brands/wo6ter/__init__.py +1 -0
  447. gbdtransformation/brands/wo6ter/filters.py +88 -0
  448. gbdtransformation/brands/wo6ter/template.yml +88 -0
  449. gbdtransformation/brands/woao/__init__.py +1 -0
  450. gbdtransformation/brands/woao/filters.py +107 -0
  451. gbdtransformation/brands/woao/schema +116 -0
  452. gbdtransformation/brands/woao/template.yml +90 -0
  453. gbdtransformation/brands/woptm/__init__.py +3 -0
  454. gbdtransformation/brands/woptm/filters.py +42 -0
  455. gbdtransformation/brands/woptm/template.yml +2 -0
  456. gbdtransformation/brands/wotm/__init__.py +3 -0
  457. gbdtransformation/brands/wotm/filters.py +127 -0
  458. gbdtransformation/brands/wotm/schema +218 -0
  459. gbdtransformation/brands/wotm/template.yml +220 -0
  460. gbdtransformation/brands/wstm/__init__.py +6 -0
  461. gbdtransformation/brands/wstm/filters.py +67 -0
  462. gbdtransformation/brands/wstm/schema +86 -0
  463. gbdtransformation/brands/wstm/template.yml +1 -0
  464. gbdtransformation/brands/wstm/tests/__init__.py +0 -0
  465. gbdtransformation/brands/wstm/tests/test.xml +132 -0
  466. gbdtransformation/brands/xxxx/__init__.py +6 -0
  467. gbdtransformation/brands/xxxx/filters.py +60 -0
  468. gbdtransformation/brands/xxxx/schema +4 -0
  469. gbdtransformation/brands/xxxx/template.yml +363 -0
  470. gbdtransformation/brands/zmtm/__init__.py +12 -0
  471. gbdtransformation/brands/zmtm/filters.py +79 -0
  472. gbdtransformation/brands/zmtm/schema +86 -0
  473. gbdtransformation/brands/zmtm/template.yml +1 -0
  474. gbdtransformation/brands/zmtm/tests/__init__.py +0 -0
  475. gbdtransformation/brands/zwtm/__init__.py +3 -0
  476. gbdtransformation/brands/zwtm/filters.py +86 -0
  477. gbdtransformation/brands/zwtm/schema +86 -0
  478. gbdtransformation/brands/zwtm/template.yml +1 -0
  479. gbdtransformation/brands/zwtm/tests/__init__.py +0 -0
  480. gbdtransformation/common/__init__.py +383 -0
  481. gbdtransformation/common/filters.py +418 -0
  482. gbdtransformation/common/jpap/__init__.py +1 -0
  483. gbdtransformation/common/jpap/filters.py +83 -0
  484. gbdtransformation/common/jpap/template.yml +37 -0
  485. gbdtransformation/common/jpbase/__init__.py +1 -0
  486. gbdtransformation/common/jpbase/filters.py +93 -0
  487. gbdtransformation/common/jpbase/template.yml +51 -0
  488. gbdtransformation/common/jprp/__init__.py +1 -0
  489. gbdtransformation/common/jprp/filters.py +86 -0
  490. gbdtransformation/common/jprp/template.yml +51 -0
  491. gbdtransformation/common/navigation.tmpl +12 -0
  492. gbdtransformation/commons/__init__.py +0 -0
  493. gbdtransformation/commons/emap/__init__.py +1 -0
  494. gbdtransformation/commons/emap/filters.py +16 -0
  495. gbdtransformation/commons/emap/template.yml +55 -0
  496. gbdtransformation/commons/emrp/__init__.py +1 -0
  497. gbdtransformation/commons/emrp/filters.py +14 -0
  498. gbdtransformation/commons/emrp/template.yml +53 -0
  499. gbdtransformation/commons/filters.py +3 -0
  500. gbdtransformation/designs/__init__.py +8 -0
  501. gbdtransformation/designs/alid/__init__.py +5 -0
  502. gbdtransformation/designs/alid/filters.py +69 -0
  503. gbdtransformation/designs/alid/schema +89 -0
  504. gbdtransformation/designs/alid/template.yml +1 -0
  505. gbdtransformation/designs/bnid/__init__.py +5 -0
  506. gbdtransformation/designs/bnid/filters.py +61 -0
  507. gbdtransformation/designs/bnid/schema +80 -0
  508. gbdtransformation/designs/bnid/template.yml +1 -0
  509. gbdtransformation/designs/bwid/__init__.py +6 -0
  510. gbdtransformation/designs/bwid/filters.py +64 -0
  511. gbdtransformation/designs/bwid/schema +101 -0
  512. gbdtransformation/designs/bwid/template.yml +1 -0
  513. gbdtransformation/designs/crid/__init__.py +5 -0
  514. gbdtransformation/designs/crid/filters.py +63 -0
  515. gbdtransformation/designs/crid/schema +94 -0
  516. gbdtransformation/designs/crid/template.yml +1 -0
  517. gbdtransformation/designs/cuid/__init__.py +5 -0
  518. gbdtransformation/designs/cuid/filters.py +60 -0
  519. gbdtransformation/designs/cuid/schema +98 -0
  520. gbdtransformation/designs/cuid/template.yml +1 -0
  521. gbdtransformation/designs/egid/__init__.py +5 -0
  522. gbdtransformation/designs/egid/filters.py +62 -0
  523. gbdtransformation/designs/egid/schema +82 -0
  524. gbdtransformation/designs/egid/template.yml +1 -0
  525. gbdtransformation/designs/filters.py +73 -0
  526. gbdtransformation/designs/idid/__init__.py +5 -0
  527. gbdtransformation/designs/idid/filters.py +67 -0
  528. gbdtransformation/designs/idid/schema +102 -0
  529. gbdtransformation/designs/idid/template.yml +1 -0
  530. gbdtransformation/designs/ipas/__init__.py +0 -0
  531. gbdtransformation/designs/ipas/filters.py +181 -0
  532. gbdtransformation/designs/ipas/template.yml +174 -0
  533. gbdtransformation/designs/joid/__init__.py +6 -0
  534. gbdtransformation/designs/joid/filters.py +62 -0
  535. gbdtransformation/designs/joid/schema +97 -0
  536. gbdtransformation/designs/joid/template.yml +1 -0
  537. gbdtransformation/designs/keid/__init__.py +5 -0
  538. gbdtransformation/designs/keid/filters.py +62 -0
  539. gbdtransformation/designs/keid/schema +99 -0
  540. gbdtransformation/designs/keid/template.yml +1 -0
  541. gbdtransformation/designs/khid/__init__.py +5 -0
  542. gbdtransformation/designs/khid/filters.py +63 -0
  543. gbdtransformation/designs/khid/schema +100 -0
  544. gbdtransformation/designs/khid/template.yml +1 -0
  545. gbdtransformation/designs/laid/__init__.py +5 -0
  546. gbdtransformation/designs/laid/filters.py +61 -0
  547. gbdtransformation/designs/laid/schema +94 -0
  548. gbdtransformation/designs/laid/template.yml +1 -0
  549. gbdtransformation/designs/mnid/__init__.py +6 -0
  550. gbdtransformation/designs/mnid/filters.py +62 -0
  551. gbdtransformation/designs/mnid/schema +98 -0
  552. gbdtransformation/designs/mnid/template.yml +1 -0
  553. gbdtransformation/designs/myid/__init__.py +5 -0
  554. gbdtransformation/designs/myid/filters.py +60 -0
  555. gbdtransformation/designs/myid/schema +95 -0
  556. gbdtransformation/designs/myid/template.yml +1 -0
  557. gbdtransformation/designs/phid/__init__.py +5 -0
  558. gbdtransformation/designs/phid/filters.py +70 -0
  559. gbdtransformation/designs/phid/schema +95 -0
  560. gbdtransformation/designs/phid/template.yml +1 -0
  561. gbdtransformation/designs/sgid/__init__.py +6 -0
  562. gbdtransformation/designs/sgid/filters.py +66 -0
  563. gbdtransformation/designs/sgid/schema +115 -0
  564. gbdtransformation/designs/sgid/template.yml +1 -0
  565. gbdtransformation/designs/thid/__init__.py +4 -0
  566. gbdtransformation/designs/thid/filters.py +64 -0
  567. gbdtransformation/designs/thid/schema +98 -0
  568. gbdtransformation/designs/thid/template.yml +1 -0
  569. gbdtransformation/designs/tnid/__init__.py +5 -0
  570. gbdtransformation/designs/tnid/filters.py +66 -0
  571. gbdtransformation/designs/tnid/schema +96 -0
  572. gbdtransformation/designs/tnid/template.yml +1 -0
  573. gbdtransformation/designs/vnid/__init__.py +5 -0
  574. gbdtransformation/designs/vnid/filters.py +62 -0
  575. gbdtransformation/designs/vnid/schema +97 -0
  576. gbdtransformation/designs/vnid/template.yml +1 -0
  577. gbdtransformation/designs/woid/__init__.py +2 -0
  578. gbdtransformation/designs/woid/filters.py +372 -0
  579. gbdtransformation/designs/woid/schema +592 -0
  580. gbdtransformation/designs/woid/template.yml +516 -0
  581. gbdtransformation/designs/xxid/__init__.py +2 -0
  582. gbdtransformation/designs/xxid/filters.py +60 -0
  583. gbdtransformation/designs/xxid/schema +4 -0
  584. gbdtransformation/designs/xxid/template.yml +358 -0
  585. gbdtransformation/execs-nico.py +709 -0
  586. gbdtransformation/execs.py +734 -0
  587. gbdtransformation/gbd-transform.exec.tgz +0 -0
  588. gbdtransformation/parser.py +190 -0
  589. gbdtransformation/renders.py +149 -0
  590. gbdtransformation/utilities/ISOCountryCodeType-V2006.xsd +1245 -0
  591. gbdtransformation/utilities/ISOCurrencyCodeType-V2001.xsd +855 -0
  592. gbdtransformation/utilities/ISOLanguageCodeType-V2002.xsd +715 -0
  593. gbdtransformation/utilities/WIPOST3CodeType-V2007.xsd +1151 -0
  594. gbdtransformation/utilities/__init__.py +0 -0
  595. gbdtransformation/utilities/st66.dot +2828 -0
  596. gbdtransformation/utilities/st66.pdf +0 -0
  597. gbdtransformation/utilities/st66.py +38700 -0
  598. gbdtransformation/utilities/st66.xsd +4174 -0
  599. schemas/ShazamConfig.py +35 -0
  600. schemas/__init__.py +0 -0
  601. schemas/schema_extractor.py +300 -0
  602. wipo_gbd_transformation-1.1.105.dist-info/LICENSE.md +687 -0
  603. wipo_gbd_transformation-1.1.105.dist-info/METADATA +25 -0
  604. wipo_gbd_transformation-1.1.105.dist-info/RECORD +607 -0
  605. wipo_gbd_transformation-1.1.105.dist-info/WHEEL +5 -0
  606. wipo_gbd_transformation-1.1.105.dist-info/entry_points.txt +6 -0
  607. wipo_gbd_transformation-1.1.105.dist-info/top_level.txt +2 -0
@@ -0,0 +1,73 @@
1
+ import re
2
+ from gbdtransformation.designs import st13_identifier
3
+ from gbdtransformation.common.filters import *
4
+
5
+ def parseStatus(status):
6
+ """ Function is here to be overriden in child elements( e.g BRTM)"""
7
+ return status
8
+
9
+ def pad_locarno(data, separator='-'):
10
+ """Convert to locarno style with padding"""
11
+ if separator in data:
12
+ slice = data.split(separator)
13
+ return slice[0].zfill(2) + '-' + pad_locarno('-'.join(slice[1:]))
14
+ return data.zfill(2)
15
+
16
+ def should_display_language(lang, payload):
17
+ if payload:
18
+ return lang
19
+ return None
20
+
21
+ def st13(appnum, registration_number, office, pos, type='Design', appdate=None, roffice=None, sanitize=True):
22
+ if not appnum:
23
+ # fallback to registration number (required for example by Hague pre-1999 records, which have no application number)
24
+ if registration_number:
25
+ # remove non digit prefix (we want to keep non digit char at the end of the registration number, to distinguish
26
+ # non unitary registration numbers from the same application, e.g. D054966 and D054966A)
27
+ registration_number = re.sub(r"^[^0-9]+", '', registration_number)
28
+ appnum = 'R' + registration_number
29
+ else:
30
+ return None
31
+ # collections are usually office code followed with tm: xxtm
32
+ collection = '%sid' % office.lower()
33
+
34
+ module_pckg = load_collection_package('designs', collection)
35
+ try:
36
+ masks = getattr(module_pckg, 'appnum_mask')
37
+ if not isinstance(masks, list): masks = [masks]
38
+ except:
39
+ masks = ['(.*)']
40
+
41
+ try:
42
+ source = getattr(module_pckg, 'source')
43
+ except:
44
+ source = 'national'
45
+ matches = None
46
+ for mask in masks:
47
+ regex = re.compile('^%s$' % mask)
48
+ matches = regex.search(appnum)
49
+ if matches:
50
+ break
51
+
52
+ if not matches:
53
+ raise Exception('could not apply appnum mask %s on %s' % (mask, appnum))
54
+
55
+ #print(appnum, ''.join(matches.groups()))
56
+ appnum = ''.join(matches.groups())
57
+
58
+ prefix = st13_identifier[source.lower()][type.lower()]
59
+ if sanitize:
60
+ # remove special characters
61
+ special_chars = re.compile(r'\W')
62
+ appnum = special_chars.sub('', appnum)
63
+
64
+ # reference office (only relevant for inerantional)
65
+ if roffice and roffice != office:
66
+ appnum = '%s%s' % (roffice.upper(), appnum)
67
+
68
+ st13 = '%s%s' % (office.upper(), prefix)
69
+ if appdate:
70
+ st13 = '%s%s' % (st13, appdate[:4])
71
+
72
+ # add application number and zfill till 17
73
+ return '%s%s' % (st13, appnum.zfill(17 - len(st13)))
@@ -0,0 +1,5 @@
1
+ render = 'JSON'
2
+ source = 'national'
3
+
4
+ # AID2018000076
5
+ appnum_mask = ['A(\\d*)', 'AID\\d{4}(\\d*)']
@@ -0,0 +1,67 @@
1
+ # standard gbd definitions
2
+ import gbdtransformation.designs.ipas.filters as ipas
3
+ import re
4
+
5
+ # namespaces defined in XML and to be ignored in procecssing
6
+ ignore_namespace = [
7
+ 'http://www.wipo.int/standards/XMLSchema/designs',
8
+ 'http://www.wipo.int/standards/XMLSchema/wo-designs'
9
+ ]
10
+ def get_appdate(appdate, appnum):
11
+ mask = 'AID(\\d{4})\\d*'
12
+ regex = re.compile('^%s$' % mask)
13
+ matches = regex.search(appnum)
14
+ if matches:
15
+ return ''.join(matches.groups())
16
+ return appdate
17
+
18
+ def get_designs_count(design, header):
19
+ return '1'
20
+
21
+ def get_designs_pos(design, header):
22
+ return '1'
23
+
24
+ def translate_kind(desgin, header):
25
+ code = header.TransactionCode.lower()
26
+ subcode = header.TransactionSubCode.lower()
27
+ if code == 'desain industri':
28
+ return 'Industrial Design'
29
+ raise Exception('Type "%s" "%s" is not mapped.' % (code, subcode))
30
+
31
+ def translate_status(design):
32
+ status = design.DesignCurrentStatusCode
33
+
34
+ return ipas.translate_status(status)
35
+
36
+
37
+ def get_registration_nb(design, idstatus):
38
+ if design.RegistrationNumber:
39
+ return design.RegistrationNumber
40
+
41
+ return None
42
+
43
+
44
+ def get_expiry_date(design, idstatus):
45
+ return ipas.get_expiry_date(design, idstatus)
46
+
47
+ def get_registration_date(design, idstatus):
48
+ return ipas.get_registration_date(design, idstatus)
49
+
50
+ def is_international(header):
51
+ return False
52
+
53
+ def get_ir_refnum(appnum):
54
+ return appnum
55
+
56
+ def select_earliest_date(publications):
57
+ return ipas.select_earliest_date(publications)
58
+
59
+ def deduplicate_publication_dates(publications):
60
+ return ipas.deduplicate_publication_dates(publications)
61
+
62
+ def deduplicate_classes(classes):
63
+ return ipas.deduplicate_classes(classes)
64
+
65
+ def deduplicate_publications(publications):
66
+ return ipas.deduplicate_publications(publications)
67
+
@@ -0,0 +1,102 @@
1
+ /Transaction
2
+ __/DesignTransactionBody
3
+ ____/TransactionContentDetails
4
+ ______/TransactionCode
5
+ ______/TransactionData
6
+ ________/DesignApplicationDetails
7
+ __________/DesignApplication
8
+ ____________/ApplicantDetails
9
+ ______________/ApplicantKey
10
+ ____________/DesignApplicationDate
11
+ ____________/DesignApplicationLanguageCode
12
+ ____________/DesignApplicationNumber
13
+ ____________/DesignDetails
14
+ ______________/Design
15
+ ________________/ApplicantDetails
16
+ __________________/Applicant
17
+ ____________________/ApplicantAddressBook
18
+ ______________________/FormattedNameAddress
19
+ ________________________/Address
20
+ __________________________/AddressCountryCode
21
+ __________________________/FreeFormatAddress
22
+ ____________________________/FreeFormatAddressLine
23
+ ________________________/Name
24
+ __________________________/FreeFormatName
25
+ ____________________________/FreeFormatNameDetails
26
+ ______________________________/FreeFormatNameLine
27
+ ______________________________/FreeFormatNameLine[@languageCode=in]
28
+ ________________/DesignCurrentStatusCode
29
+ ________________/DesignCurrentStatusDate
30
+ ________________/DesignDescription
31
+ ________________/DesignEventDetails
32
+ __________________/DesignEvent
33
+ ____________________/DesignEventCode
34
+ ____________________/DesignEventDate
35
+ ____________________/OfficeSpecificDesignEventCode
36
+ ____________________/OfficeSpecificDesignEventDescription
37
+ ____________________/OfficeSpecificDesignEventDescription[@languageCode=in]
38
+ ____________________/OfficeSpecificDesignEventName
39
+ ________________/DesignIdentifier
40
+ ________________/DesignRepresentationSheetDetails
41
+ __________________/DesignRepresentationSheet
42
+ ____________________/RepresentationSheetFilename
43
+ ________________/DesignSpecimenDetails
44
+ __________________/DesignSpecimen
45
+ ____________________/SpecimenDescription
46
+ ____________________/SpecimenDescription[@languageCode=in]
47
+ ____________________/SpecimenIdentifier
48
+ ________________/DesignTitle
49
+ ________________/DesignTitle[@languageCode=in]
50
+ ________________/DesignTitle[@sequenceNumber=1]
51
+ ________________/DesignerDetails
52
+ __________________/Designer
53
+ ____________________/DesignerAddressBook
54
+ ______________________/FormattedNameAddress
55
+ ________________________/Address
56
+ __________________________/AddressCountryCode
57
+ __________________________/FreeFormatAddress
58
+ ____________________________/FreeFormatAddressLine
59
+ ________________________/Name
60
+ __________________________/FreeFormatName
61
+ ____________________________/FreeFormatNameDetails
62
+ ______________________________/FreeFormatNameLine
63
+ ______________________________/FreeFormatNameLine[@languageCode=in]
64
+ ________________/ExpiryDate
65
+ ________________/IndicationProductDetails
66
+ __________________/IndicationProduct
67
+ ____________________/ClassDescriptionDetails
68
+ ______________________/ClassDescription
69
+ ________________________/ClassNumber
70
+ ________________________/ProductDescription
71
+ ____________________/ClassificationKindCode
72
+ ____________________/ClassificationVersion
73
+ ________________/NoveltyStatement
74
+ ________________/NoveltyStatement[@languageCode=]
75
+ ________________/NoveltyStatement[@languageCode=in]
76
+ ________________/PriorityDetails
77
+ __________________/Priority
78
+ ____________________/PriorityCountryCode
79
+ ____________________/PriorityDate
80
+ ____________________/PriorityNumber
81
+ ________________/PublicationDetails
82
+ __________________/Publication
83
+ ____________________/PublicationDate
84
+ ____________________/PublicationIdentifier
85
+ ________________/RegistrationDate
86
+ ________________/RegistrationNumber
87
+ ________________/RepresentativeDetails
88
+ __________________/Representative
89
+ ____________________/RepresentativeAddressBook
90
+ ______________________/FormattedNameAddress
91
+ ________________________/Address
92
+ __________________________/AddressCountryCode
93
+ __________________________/FreeFormatAddress
94
+ ____________________________/FreeFormatAddressLine
95
+ ________________________/Name
96
+ __________________________/FreeFormatName
97
+ ____________________________/FreeFormatNameDetails
98
+ ______________________________/FreeFormatNameLine
99
+ ______________________________/FreeFormatNameLine[@languageCode=in]
100
+ ____________/RegistrationOfficeCode
101
+ ______/TransactionIdentifier
102
+ ______/TransactionSubCode
@@ -0,0 +1 @@
1
+ {% include "ipas/template.yml" %}
File without changes
@@ -0,0 +1,181 @@
1
+ # standard gdd definitions
2
+ from gbdtransformation.designs import kinds as std_kinds
3
+ from gbdtransformation.designs import status as std_status
4
+
5
+ # namespaces defined in XML and to be ignored in procecssing
6
+ ignore_namespace = []
7
+
8
+
9
+ # -------------------------------------------------------------
10
+ # data translation helpers:
11
+ # translate values from office interpretation to gbd equivalent
12
+ # -------------------------------------------------------------
13
+
14
+ def translate_kind(kind):
15
+ """translation of the kind of trademark to a
16
+ multivalue gbd interpretation"""
17
+
18
+ # out-of-the-box match
19
+ if kind.capitalize() in std_kinds:
20
+ return [kind.capitalize()]
21
+
22
+ # __insert here__ : translation logic
23
+
24
+ # raise Exception to recognize unmapped values
25
+ raise Exception('kind "%s" is not mapped.' % kind)
26
+
27
+ # Expired trademarks with no Expiry date
28
+ # => get it from Expired event
29
+ def get_expiry_date(design, idstatus):
30
+ if design.ExpiryDate:
31
+ return design.ExpiryDate
32
+
33
+ if not idstatus == 'Expired':
34
+ return None
35
+
36
+ # find the MarkEvent Expired and get its date
37
+ events = design.get('MarkEventDetails', {}).get('MarkEvent', [])
38
+ for event in events:
39
+ if hasattr(event, 'MarkEventCode'):
40
+ if(event.MarkEventCode == 'Expired'):
41
+ return event.MarkEventDate
42
+
43
+
44
+ # Registered or Expired trademarks with no registration date
45
+ # => get it from Registered or Published Event
46
+ def get_registration_date(trademark, tmstatus):
47
+ if trademark.RegistrationDate:
48
+ return trademark.RegistrationDate
49
+
50
+ if not tmstatus in ['Expired', 'Registered']:
51
+ return None
52
+
53
+ # find the MarkEvent Expired and get its date
54
+ events = trademark.get('MarkEventDetails', {}).get('MarkEvent', [])
55
+
56
+ # first priority is to get the Registered Event
57
+ for event in events:
58
+ if hasattr(event, 'MarkEventCode'):
59
+ if event.MarkEventCode == 'Registered':
60
+ return event.MarkEventDate
61
+ # second priority is to get the Published Event
62
+ for event in events:
63
+ if hasattr(event, 'MarkEventCode'):
64
+ if event.MarkEventCode == 'Published':
65
+ return event.MarkEventDate
66
+
67
+ # given a list of dates as strings, e.g. publication dates, deduplicate
68
+ def deduplicate_dates(dates):
69
+ return list(set(dates))
70
+
71
+ # given a list of publications, deduplicate
72
+ def deduplicate_publication_dates(design):
73
+ if design == None:
74
+ return None
75
+ dates = []
76
+ if "PublicationDetails" in design:
77
+ publicationDetails = design["PublicationDetails"]
78
+ publications = publicationDetails.get('Publication', [])
79
+ if not isinstance(publications, list):
80
+ publications = [publications]
81
+ for publication in publications:
82
+ if "PublicationDate" in publication:
83
+ dates.append(publication["PublicationDate"])
84
+ return deduplicate_dates(dates)
85
+
86
+ # given a list of classes, deduplicate
87
+ def deduplicate_classes(classes):
88
+ deduplicate_classes = []
89
+ if not isinstance(classes, list):
90
+ classes = [classes]
91
+ for the_class in classes:
92
+ if the_class["ClassNumber"] not in deduplicate_classes:
93
+ deduplicate_classes.append(the_class["ClassNumber"])
94
+ result = []
95
+ for deduplicate_class in deduplicate_classes:
96
+ result.append({ "code": deduplicate_class} )
97
+ return result
98
+
99
+ # given a list of publications, deduplicate
100
+ def deduplicate_publications(publications):
101
+ deduplicate_publications = []
102
+ pub_keys = []
103
+ if not isinstance(publications, list):
104
+ publications = [publications]
105
+ for publication in publications:
106
+ publication_date = publication.get("PublicationDate")
107
+ publication_identifier = publication.get("PublicationIdentifier")
108
+ pub_key = ""
109
+ if publication_identifier:
110
+ pub_key += publication_identifier
111
+ if publication_date:
112
+ pub_key += publication_date
113
+ if pub_key not in pub_keys:
114
+ deduplicate_publications.append(publication)
115
+ pub_keys.append(pub_key)
116
+ result = []
117
+ for publication in deduplicate_publications:
118
+ res = {}
119
+ if "PublicationIdentifier" in publication:
120
+ res["identifier"] = publication["PublicationIdentifier"]
121
+ if "PublicationDate" in publication:
122
+ res["date"] = publication["PublicationDate"]
123
+ result.append(res)
124
+ return result
125
+
126
+ # given a list of publications with dates as strings, select the earliest date publication
127
+ def select_earliest_date(design):
128
+ if design == None:
129
+ return None
130
+
131
+ if "PublicationDetails" in design:
132
+ publicationDetails = design["PublicationDetails"]
133
+ publications = publicationDetails.get('Publication', [])
134
+ if not isinstance(publications, list):
135
+ publications = [publications]
136
+ if len(publications) == 0:
137
+ return None
138
+ elif len(publications) == 1:
139
+ return publications[0]["PublicationDate"]
140
+ else:
141
+ earliest_date = None
142
+ n = -1
143
+ for count, publication in enumerate(publications):
144
+ if earliest_date == None or publication["PublicationDate"] < earliest_date:
145
+ earliest_date = publication["PublicationDate"]
146
+ return earliest_date
147
+ else:
148
+ return None
149
+
150
+ def translate_status(status):
151
+ status = status.lower()
152
+
153
+ if status == 'registered': return 'Registered'
154
+ if status == 'active': return 'Registered'
155
+ if status == 'reinstated': return 'Registered'
156
+ if status == 'expired': return 'Expired'
157
+ if status == 'inactive': return 'Expired'
158
+ if status == 'published': return 'Pending'
159
+ if status == 'examined': return 'Pending'
160
+ if status == 'filed': return 'Pending'
161
+ if status == 'converted': return 'Pending'
162
+ if status == 'opposed': return 'Pending'
163
+ if status == 'pending': return 'Pending'
164
+ if status == 'appealed': return 'Pending'
165
+ if status == 'awaiting court action': return 'Pending'
166
+ if status == 'application published': return 'Pending'
167
+ if status == 'abandoned': return 'Ended'
168
+ if status == 'withdrawn': return 'Ended'
169
+ if status == 'rejected': return 'Ended'
170
+ if status == 'finalrefusal': return 'Ended'
171
+ if status == 'suspended': return 'Ended'
172
+ if status == 'invalidated': return 'Ended'
173
+ if status == 'surrendered': return 'Ended'
174
+ if status == 'suspended': return 'Ended'
175
+ if status == 'renewed': return 'Registered'
176
+ if status == 'renewalprocess': return 'Registered'
177
+ if status == 'canceled': return 'Ended'
178
+ if status == 'cancelled': return 'Ended'
179
+
180
+ #return 'Unknown'
181
+ raise Exception('Status "%s" not mapped.' % status)
@@ -0,0 +1,174 @@
1
+ {% from 'navigation.tmpl' import match %}
2
+
3
+ {% call(header) match('DesignTransactionBody.TransactionContentDetails', Transaction) %}
4
+
5
+ {% set design = Transaction.DesignTransactionBody.TransactionContentDetails.TransactionData.DesignApplicationDetails.DesignApplication %}
6
+ {% set design_count = design | get_designs_count(header) %}
7
+ {% set design_pos = design | get_designs_pos(header) %}
8
+ {% set kind = design | translate_kind(header) %}
9
+ type: 'DESIGN'
10
+ subtype: 'OPEN'
11
+ designGrouping: 'MULTIPLE'
12
+ designsCount: {{ design_count }}
13
+ kind:
14
+ - {{kind}}
15
+ registrationOfficeCode: {{ design.RegistrationOfficeCode }}
16
+ designatedCountries:
17
+ {% if design.DesignatedCountryDetails %}
18
+ {% call(designations) match('DesignatedCountry', design.DesignatedCountryDetails) %}
19
+ - {{ designations.DesignatedCountryCode }}
20
+ {% endcall %}
21
+ {% else %}
22
+ - {{ design.RegistrationOfficeCode }}
23
+ {% endif %}
24
+ reference:
25
+ {% if header | is_international %}
26
+ registration:
27
+ - number: {{ design.DesignApplicationNumber | get_ir_refnum }}
28
+ office: WO
29
+ {% endif %}
30
+ {% if not kind == 'Industrial Design' %}
31
+ registration:
32
+ - number: {{ design.RegistrationNumber }}
33
+ {% endif %}
34
+
35
+ {% set idstatus = design.DesignDetails.Design | translate_status %}
36
+ {% set appdate = design.DesignApplicationDate | get_appdate(design.DesignApplicationNumber) %}
37
+
38
+ st13: {{ design.DesignApplicationNumber | st13(None, design.RegistrationOfficeCode, design_pos, appdate=appdate, roffice=design.ReceivingOfficeCode) }}
39
+
40
+ applicationNumber: {{ design.DesignApplicationNumber }}
41
+ applicationDate: {{ design.DesignApplicationDate }}
42
+ registrationNumber: {{ design.DesignDetails.Design | get_registration_nb(idstatus) | remove_trailing('-') }}
43
+ registrationDate: {{ design.DesignDetails.Design | get_registration_date(idstatus) }}
44
+
45
+ publicationDates: {{ design.DesignDetails.Design | deduplicate_publication_dates }}
46
+ earliestPublicationDate: {{ design.DesignDetails.Design | select_earliest_date }}
47
+
48
+ expiryDate: {{ design.DesignDetails.Design | get_expiry_date(idstatus) }}
49
+
50
+ applicationLanguageCode: {{ design.DesignApplicationLanguageCode }}
51
+
52
+ applicants:
53
+ {% call(applicant) match('ApplicantDetails.Applicant', design.DesignDetails.Design) %}
54
+ {% call(details) match('ApplicantAddressBook.FormattedNameAddress.Name.FreeFormatName', applicant) %}
55
+ - identifier: {{ details.ApplicantIdentifier }}
56
+ fullName:
57
+ {% call(nameline) match('FreeFormatNameDetails.FreeFormatNameLine', details) %}
58
+ {% if nameline | has_value %}
59
+ - text: {{ nameline }}
60
+ languageCode: {{ nameline.__value | guess_language(nameline._languageCode, design.DesignApplicationLanguageCode) }}
61
+ {% endif %}
62
+ {% endcall %}
63
+ {% endcall %}
64
+ {% call(address) match('ApplicantAddressBook.FormattedNameAddress.Address', applicant) %}
65
+ fullAddress:
66
+ {% call(adrline) match('FreeFormatAddress.FreeFormatAddressLine', address) %}
67
+ {% if adrline | has_value %}
68
+ - text: {{ adrline }}
69
+ languageCode: {{ adrline | guess_language(adrline._languageCode, design.DesignApplicationLanguageCode) }}
70
+ {% endif %}
71
+ {% endcall %}
72
+ countryCode: {{ address.AddressCountryCode | remove_trailing('-', '.') | remove_numerics }}
73
+ {% endcall %}
74
+ {% endcall %}
75
+
76
+ representatives:
77
+ {% call(representative) match('RepresentativeDetails.Representative', design.DesignDetails.Design) %}
78
+ {% call(details) match('RepresentativeAddressBook.FormattedNameAddress.Name.FreeFormatName', representative) %}
79
+ - identifier: {{ details.RepresentativeIdentifier }}
80
+ fullName:
81
+ {% call(nameline) match('FreeFormatNameDetails.FreeFormatNameLine', details) %}
82
+ - text: {{ nameline }}
83
+ languageCode: {{ nameline.__value | guess_language(nameline._languageCode, design.DesignApplicationLanguageCode) }}
84
+ {% endcall %}
85
+ {% endcall %}
86
+ {% call(address) match('RepresentativeAddressBook.FormattedNameAddress.Address', representative) %}
87
+ fullAddress:
88
+ {% call(adrline) match('FreeFormatAddress.FreeFormatAddressLine', address) %}
89
+ {% if not adrline == '-' %}
90
+ - text: {{ adrline }}
91
+ languageCode: {{ adrline | guess_language(adrline._languageCode, design.DesignApplicationLanguageCode) }}
92
+ {% endif %}
93
+ {% endcall %}
94
+ countryCode: {{ address.AddressCountryCode | remove_trailing('-', '.') | remove_numerics }}
95
+ {% endcall %}
96
+ {% endcall %}
97
+
98
+ designs:
99
+ - designPos: {{ design_pos }}
100
+ officeStatus: {{ design.DesignDetails.Design.DesignCurrentStatusCode | parseStatus }}
101
+ gbdStatus: {{ idstatus }}
102
+ statusDate: {{ design.DesignDetails.Design.DesignCurrentStatusDate }}
103
+
104
+ productIndication:
105
+ {% call(indic) match('DesignTitle', design.DesignDetails.Design) %}
106
+ - languageCode: {{ indic | guess_language(indic._languageCode, design.DesignApplicationLanguageCode) }}
107
+ text: {{ indic }}
108
+ {% endcall %}
109
+
110
+ designDescription:
111
+ - languageCode: {{ design.DesignDetails.Design.DesignDescription | guess_language(design.DesignApplicationLanguageCode) }}
112
+ text: {{ design.DesignDetails.Design.DesignDescription }}
113
+
114
+ designImageDetails:
115
+ {% call(sheet) match('DesignRepresentationSheetDetails.DesignRepresentationSheet', design.DesignDetails.Design) %}
116
+ {% call(img) match('RepresentationSheetFilename',sheet) %}
117
+ - name: {{ img }}
118
+ {% endcall %}
119
+ {% endcall %}
120
+
121
+
122
+ designer:
123
+ {% call(designer) match('DesignerDetails.Designer', design.DesignDetails.Design) %}
124
+ {% call(details) match('DesignerAddressBook.FormattedNameAddress.Name.FreeFormatName', designer) %}
125
+ - identifier: {{ details.DesignerIdentifier }}
126
+ fullName:
127
+ {% call(nameline) match('FreeFormatNameDetails.FreeFormatNameLine', details) %}
128
+ - text: {{ nameline }}
129
+ languageCode: {{ nameline.__value | guess_language(nameline._languageCode, design.DesignApplicationLanguageCode) }}
130
+ {% endcall %}
131
+ {% endcall %}
132
+ {% call(address) match('DesignerAddressBook.FormattedNameAddress.Address', designer) %}
133
+ fullAddress:
134
+ {% call(adrline) match('FreeFormatAddress.FreeFormatAddressLine', address) %}
135
+ {% if not adrline == '-' %}
136
+ - text: {{ adrline }}
137
+ languageCode: {{ adrline | guess_language(adrline._languageCode, design.DesignApplicationLanguageCode) }}
138
+ {% endif %}
139
+ {% endcall %}
140
+ countryCode: {{ address.AddressCountryCode | remove_trailing('-', '.') | remove_numerics }}
141
+ {% endcall %}
142
+ {% endcall %}
143
+
144
+ productIndicationClasses:
145
+ {% call(indicationProducts) match('IndicationProductDetails.IndicationProduct', design.DesignDetails.Design) %}
146
+ - kind: {{ indicationProducts.ClassificationKindCode | lower }}
147
+ version: {{ indicationProducts.ClassificationVersion}}
148
+ classes:
149
+ - {{ indicationProducts.ClassDescriptionDetails.ClassDescription | deduplicate_classes }}
150
+ {% endcall %}
151
+
152
+ priorities:
153
+ {% call(priority) match('PriorityDetails.Priority', design.DesignDetails.Design) %}
154
+ - countryCode: {{ priority.PriorityCountryCode }}
155
+ number: {{ priority.PriorityNumber }}
156
+ date: {{ priority.PriorityDate }}
157
+ {% endcall %}
158
+
159
+ noveltyStatement:
160
+ {% call(indic) match('NoveltyStatement', design.DesignDetails.Design) %}
161
+ - languageCode: {{ indic | remove_trailing('-', '.') | guess_language(indic._languageCode, design.DesignApplicationLanguageCode) }}
162
+ text: {{ indic | remove_trailing('-', '.') }}
163
+ {% endcall %}
164
+
165
+ {% set earliestDesignPub = design.DesignDetails.Design.PublicationDetails.Publication | select_earliest_date %}
166
+ earliestPublications:
167
+ identifier: {{ earliestDesignPub.PublicationIdentifier}}
168
+ date: {{ earliestDesignPub.PublicationDate}}
169
+ section:
170
+
171
+ publications:
172
+ - {{ design.DesignDetails.Design.PublicationDetails.Publication | deduplicate_publications }}
173
+
174
+ {% endcall %}
@@ -0,0 +1,6 @@
1
+ render = 'JSON'
2
+ source = 'national'
3
+
4
+ #JO/D/1996/0625
5
+ appnum_mask = ['(JO)/D/\\d*/(\\d*)',
6
+ '(\\d*)/D/\\d*/(\\d*)']
@@ -0,0 +1,62 @@
1
+ # standard gbd definitions
2
+ import gbdtransformation.designs.ipas.filters as ipas
3
+
4
+
5
+ # namespaces defined in XML and to be ignored in procecssing
6
+ ignore_namespace = [
7
+ 'http://www.wipo.int/standards/XMLSchema/designs',
8
+ 'http://www.wipo.int/standards/XMLSchema/wo-designs'
9
+ ]
10
+ def get_appdate(appdate, appnum):
11
+ return appnum.split('/')[-2]
12
+
13
+ def get_designs_count(design, header):
14
+ return '1'
15
+
16
+ def get_designs_pos(design, header):
17
+ return '1'
18
+
19
+ def translate_kind(desgin, header):
20
+ code = header.TransactionCode.lower()
21
+ subcode = header.TransactionSubCode.lower()
22
+ if code == 'نموذج صناعي':
23
+ return 'Industrial Design'
24
+ raise Exception('Type "%s" "%s" is not mapped.' % (code, subcode))
25
+
26
+ def translate_status(design):
27
+ status = design.DesignCurrentStatusCode
28
+
29
+ return ipas.translate_status(status)
30
+
31
+
32
+ def get_registration_nb(design, idstatus):
33
+ if design.RegistrationNumber:
34
+ return design.RegistrationNumber
35
+
36
+ return None
37
+
38
+
39
+ def get_expiry_date(design, idstatus):
40
+ return ipas.get_expiry_date(design, idstatus)
41
+
42
+ def get_registration_date(design, idstatus):
43
+ return ipas.get_registration_date(design, idstatus)
44
+
45
+ def is_international(header):
46
+ return False
47
+
48
+ def get_ir_refnum(appnum):
49
+ return appnum
50
+
51
+ def select_earliest_date(publications):
52
+ return ipas.select_earliest_date(publications)
53
+
54
+ def deduplicate_publication_dates(publications):
55
+ return ipas.deduplicate_publication_dates(publications)
56
+
57
+ def deduplicate_classes(classes):
58
+ return ipas.deduplicate_classes(classes)
59
+
60
+ def deduplicate_publications(publications):
61
+ return ipas.deduplicate_publications(publications)
62
+