wipo-gbd-transformation 1.1.67__py3-none-any.whl → 1.1.69__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.

Potentially problematic release.


This version of wipo-gbd-transformation might be problematic. Click here for more details.

@@ -1,10 +1,59 @@
1
1
  from datetime import datetime
2
+ import gbdtransformation.brands.ipas.filters as ipas
2
3
 
3
4
  # -------------------------------------------------------------
4
5
  # data translation helpers:
5
6
  # translate values from office interpretation to gbd equivalent
6
7
  # -------------------------------------------------------------
7
8
 
9
+ ignore_namespace = [
10
+ 'http://www.wipo.int/standards/XMLSchema/trademarks',
11
+ 'http://www.wipo.int/standards/XMLSchema/wo-trademarks']
12
+
13
+ def get_appdate(appdate, appnum):
14
+ return appnum.split('/')[-2].zfill(4)
15
+
16
+ def clean_application_number(number):
17
+ # PH/4/1981/00000115 -> 4/1981/00000115
18
+ if number.startswith("PH/"):
19
+ number = number.replace("PH/", "")
20
+ return number
21
+
22
+ def get_registration_nb(trademark, tmstatus):
23
+ if trademark.RegistrationNumber:
24
+ return trademark.RegistrationNumber
25
+
26
+ if not tmstatus in ['Expired', 'Registered']:
27
+ return None
28
+
29
+ # 4/1981/00000115
30
+ appnum = clean_application_number(trademark.ApplicationNumber)
31
+ return appnum
32
+
33
+ def get_expiry_date(trademark, tmstatus):
34
+ return ipas.get_expiry_date(trademark, tmstatus)
35
+
36
+ def get_registration_date(trademark, tmstatus):
37
+ return ipas.get_registration_date(trademark, tmstatus)
38
+
39
+ def translate_type(header):
40
+ code = header.TransactionCode
41
+
42
+ if code == 'Trademark': return 'TRADEMARK'
43
+ if code == 'Trademarks': return 'TRADEMARK'
44
+
45
+ raise Exception('Type "%s" is not mapped.' % code)
46
+
47
+ def translate_kind(trademark, header):
48
+ subcode = header.TransactionSubCode
49
+
50
+ if subcode == 'Part A': return ['Individual']
51
+ if subcode == 'Part B': return ['Individual']
52
+ if subcode == 'National': return ['Individual']
53
+ if subcode == 'Trademark (national)': return ['Individual']
54
+
55
+ raise Exception('Kind "%s" not mapped.' % subcode)
56
+
8
57
  def convertdate2(date, input_formats, output_format="%Y-%m-%d"):
9
58
  if not date: return None
10
59
 
@@ -61,15 +110,31 @@ def translate_status(record):
61
110
 
62
111
  raise Exception('Status "%s" unmapped' % status)
63
112
 
113
+ def translate_status(trademark):
114
+ status = trademark.MarkCurrentStatusCode
115
+
116
+ if status == 'TM Applications Received in Error': return 'Ended'
117
+
118
+ return ipas.translate_status(status)
119
+
120
+ def translate_event(event):
121
+ if event == 'TM Applications Received in Error': return 'Withdrawn'
122
+ return ipas.translate_event(event)
123
+
124
+ def translate_feature(trademark):
125
+ feature = trademark.MarkFeature
64
126
 
65
- def translate_feature(feature):
66
127
  if not feature: return 'Undefined'
67
128
 
68
129
  if feature == 'B': return 'Combined'
69
130
  if feature == 'L': return 'Figurative'
70
131
  if feature == 'N': return 'Word'
71
132
 
72
- raise Exception('Feature "%s" unmapped' % feature)
133
+ return ipas.translate_feature(feature)
134
+ #raise Exception('Feature "%s" unmapped' % feature)
135
+
136
+ def verbal_lang_map(markVerbalElements, applang=None):
137
+ return ipas.verbal_lang_map(markVerbalElements, applang=applang)
73
138
 
74
139
  def get_address(record):
75
140
  if not record: return None
@@ -79,3 +144,26 @@ def get_address(record):
79
144
  addr = [x for x in addr if x]
80
145
 
81
146
  return ', '.join(addr)
147
+
148
+ # no international for PH
149
+ def is_international(header):
150
+ return False
151
+
152
+ # never accessed
153
+ def get_ir_refnum(appnum):
154
+ return
155
+
156
+ def get_goods_services(goods_services):
157
+ return ipas.get_goods_services(goods_services)
158
+
159
+ def get_file_name(img):
160
+ if img == None:
161
+ return None
162
+ result = ""
163
+ if img.MarkImageFilename:
164
+ result += img.MarkImageFilename
165
+ if img.MarkImageFileFormat:
166
+ result += "." + img.MarkImageFileFormat.lower()
167
+ if len(result) == 0:
168
+ return None
169
+ return result
@@ -1 +1,189 @@
1
- {% include "ipas/template.yml" %}
1
+ {% from 'navigation.tmpl' import match %}
2
+
3
+ {% call(header) match('TradeMarkTransactionBody.TransactionContentDetails', Transaction) %}
4
+
5
+ {% set type = header | translate_type %}
6
+ type: {{ type }}
7
+
8
+ {% call(trademark) match('TransactionData.TradeMarkApplication.TradeMarkDetails.TradeMark', header) %}
9
+
10
+ {% set kind = trademark | translate_kind(header) %}
11
+
12
+ kind: {{ kind }}
13
+
14
+ reference:
15
+ {% if header | is_international %}
16
+ office: WO
17
+ registration:
18
+ - number: {{ trademark.ApplicationNumber | get_ir_refnum }}
19
+ {% endif %}
20
+ {% if not type == 'TRADEMARK' %}
21
+ office: {{ trademark.RegistrationOfficeCode }}
22
+ {% endif %}
23
+
24
+ registrationOfficeCode: {{ trademark.RegistrationOfficeCode }}
25
+ designatedCountries:
26
+ - {{ trademark.RegistrationOfficeCode }}
27
+
28
+ applicationLanguageCode: {{ trademark.ApplicationLanguageCode }}
29
+
30
+ {% set tmstatus = trademark | translate_status %}
31
+ {% set appdate = trademark.ApplicationDate | get_appdate(trademark.ApplicationNumber) %}
32
+
33
+
34
+ gbdStatus: {{ tmstatus }}
35
+ officeStatus: {{ trademark.MarkCurrentStatusCode | parseStatus }}
36
+ statusDate: {{ trademark.MarkCurrentStatusDate }}
37
+ publicationDate: {{ (trademark.PublicationDetails.Publication | last).PublicationDate }}
38
+
39
+ markFeature: {{ trademark | translate_feature }}
40
+
41
+ st13: {{ trademark.ApplicationNumber | clean_application_number | st13(trademark.RegistrationOfficeCode, type=type, appdate=appdate) }}
42
+ applicationNumber: {{ trademark.ApplicationNumber | clean_application_number }}
43
+ applicationDate: {{ trademark.ApplicationDate }}
44
+ registrationNumber: {{ trademark | get_registration_nb(tmstatus) | remove_trailing('-') }}
45
+ registrationDate: {{ trademark | get_registration_date(tmstatus) }}
46
+
47
+ expiryDate: {{ trademark | get_expiry_date(tmstatus) }}
48
+
49
+ {% if tmstatus == 'Ended' %}
50
+ terminationDate: {{ trademark.MarkCurrentStatusDate }}
51
+ {% endif %}
52
+
53
+ markDisclaimerDetails:
54
+ {% call(disclaimer) match('MarkDisclaimerDetails.MarkDisclaimer', trademark) %}
55
+ {% if disclaimer.__value != 'N/A' and disclaimer.__value != 'NONE' and disclaimer.__value != 'None' %}
56
+ - text: {{ disclaimer.__value }}
57
+ languageCode: {{ disclaimer.__value | guess_language(disclaimer._languageCode, default=trademark.ApplicationLanguageCode) }}
58
+ {% endif %}
59
+ {% endcall %}
60
+
61
+ wordMarkSpecification:
62
+ {% call(wordSpec) match('WordMarkSpecification', trademark) %}
63
+ {% set verbal_by_language = wordSpec.MarkVerbalElementText | verbal_lang_map(applang=trademark.ApplicationLanguageCode) %}
64
+ markVerbalElement:
65
+ {% for lang, verbals in verbal_by_language.items() %}
66
+ {% for verbal in verbals %}
67
+ - languageCode: {{ lang }}
68
+ text: {{ verbal }}
69
+ {% endfor %}
70
+ {% endfor %}
71
+ markTranslation:
72
+ {% call(trans) match('MarkTranslation', wordSpec) %}
73
+ {% if trans != 'N/A' and trans != 'NONE' and trans != 'None' %}
74
+ - text: {{ trans }}
75
+ languageCode: {{ trans | guess_language(trans._languageCode, trademark.ApplicationLanguageCode) }}
76
+ {% endif %}
77
+ {% endcall %}
78
+ {% endcall %}
79
+
80
+ markImageDetails:
81
+ {% call(img) match('MarkImageDetails.MarkImage', trademark) %}
82
+ - name: {{ img | get_file_name }}
83
+ {% call(cclaim) match('MarkImageColourClaimedText', img) %}
84
+ {% if cclaim.__value != 'N/A' and cclaim.__value != 'NONE' and cclaim.__value != 'None' %}
85
+ colourIndicator: {{ cclaim.__value | remove_trailing('-') | get_true_or_false }}
86
+ colourClaimed:
87
+ - text: {{ cclaim.__value | remove_trailing('-') }}
88
+ languageCode: {{ cclaim.__value | remove_trailing('-') | guess_language(cclaim._languageCode, trademark.ApplicationLanguageCode) }}
89
+ {% endif %}
90
+ {% endcall %}
91
+ {% call(category) match('MarkImageCategory', img) %}
92
+ classification:
93
+ kind: {{ category.CategoryKind }}
94
+ version: {{ category.CategoryVersion | parse_version }}
95
+ code:
96
+ {% call(vc) match('CategoryCodeDetails.CategoryCode', category) %}
97
+ - {{ vc }}
98
+ {% endcall %}
99
+ {% endcall %}
100
+ {% endcall %}
101
+
102
+ {% set nc_gs = trademark.GoodsServicesDetails.GoodsServices.ClassDescriptionDetails.ClassDescription | get_goods_services %}
103
+ {% if (nc_gs.keys() | length) > 0 %}
104
+ goodsServicesClassification:
105
+ kind: Nice
106
+ version: {{ ASK_THE_OFFICE }}
107
+ class:
108
+ {% for nc in nc_gs.keys() %}
109
+ - code: {{ nc | int }}
110
+ {% if nc_gs[nc]['terms'] %}
111
+ terms:
112
+ {{ nc_gs[nc]['terms'] | guess_language(nc_gs[nc['terms']], trademark.ApplicationLanguageCode) | field_name}}:
113
+ {% for gsline in nc_gs[nc]['terms'] | remove_trailing('.', '-') | split_terms %}
114
+ - {{ gsline | lower }}
115
+ {% endfor %}
116
+ {% endif %}
117
+ {% endfor %}
118
+ {% endif %}
119
+
120
+
121
+ applicants:
122
+ {% call(applicant) match('ApplicantDetails.Applicant', trademark) %}
123
+ {% call(details) match('ApplicantAddressBook.FormattedNameAddress.Name.FreeFormatName', applicant) %}
124
+ - identifier: {{ details.ApplicantIdentifier }}
125
+ fullName:
126
+ {% call(nameline) match('FreeFormatNameDetails.FreeFormatNameLine', details) %}
127
+ {% if nameline | has_value %}
128
+ - text: {{ nameline }}
129
+ languageCode: {{ nameline.__value | guess_language(nameline._languageCode, trademark.ApplicationLanguageCode) }}
130
+ {% endif %}
131
+ {% endcall %}
132
+ {% endcall %}
133
+ {% call(address) match('ApplicantAddressBook.FormattedNameAddress.Address', applicant) %}
134
+ fullAddress:
135
+ {% call(adrline) match('FreeFormatAddress.FreeFormatAddressLine', address) %}
136
+ {% if adrline | has_value %}
137
+ - text: {{ adrline }}
138
+ languageCode: {{ adrline | guess_language(adrline._languageCode, trademark.ApplicationLanguageCode) }}
139
+ {% endif %}
140
+ {% endcall %}
141
+ countryCode: {{ address.AddressCountryCode | remove_trailing('-', '.') | remove_numerics }}
142
+ {% endcall %}
143
+ {% endcall %}
144
+
145
+ representatives:
146
+ {% call(representative) match('RepresentativeDetails.Representative', trademark) %}
147
+ {% call(details) match('RepresentativeAddressBook.FormattedNameAddress.Name.FreeFormatName', representative) %}
148
+ - identifier: {{ details.RepresentativeIdentifier }}
149
+ fullName:
150
+ {% call(nameline) match('FreeFormatNameDetails.FreeFormatNameLine', details) %}
151
+ - text: {{ nameline }}
152
+ languageCode: {{ nameline.__value | guess_language(nameline._languageCode, trademark.ApplicationLanguageCode) }}
153
+ {% endcall %}
154
+ {% endcall %}
155
+ {% call(address) match('RepresentativeAddressBook.FormattedNameAddress.Address', representative) %}
156
+ fullAddress:
157
+ {% call(adrline) match('FreeFormatAddress.FreeFormatAddressLine', address) %}
158
+ {% if not adrline == '-' %}
159
+ - text: {{ adrline }}
160
+ languageCode: {{ adrline | guess_language(adrline._languageCode, trademark.ApplicationLanguageCode) }}
161
+ {% endif %}
162
+ {% endcall %}
163
+ countryCode: {{ address.AddressCountryCode | remove_trailing('-', '.') | remove_numerics }}
164
+ {% endcall %}
165
+ {% endcall %}
166
+
167
+ priorities:
168
+ {% call(priority) match('PriorityDetails.Priority', trademark) %}
169
+ - countryCode: {{ priority.PriorityCountryCode }}
170
+ number: {{ priority.PriorityNumber }}
171
+ date: {{ priority.PriorityDate }}
172
+ {% endcall %}
173
+
174
+ events:
175
+ {% call(event) match('MarkEventDetails.MarkEvent', trademark) %}
176
+ {% if event.MarkEventCode %}
177
+ - officeKind: {{ event.MarkEventCode }}
178
+ gbdKind: {{ event.MarkEventCode | translate_event }}
179
+ date: {{ event.MarkEventDate }}
180
+ {% else %}
181
+ - officeKind: {{ event.OfficeSpecificMarkEventName }}
182
+ gbdKind: {{ event.OfficeSpecificMarkEventName | translate_event }}
183
+ date: {{ event.MarkEventDate }}
184
+
185
+ {% endif %}
186
+ {% endcall %}
187
+
188
+ {% endcall %}
189
+ {% endcall %}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wipo-gbd-transformation
3
- Version: 1.1.67
3
+ Version: 1.1.69
4
4
  Summary: GBD XML ETL package
5
5
  Home-page: https://github.com/GBD-Wipo/xmlE
6
6
  Author: WIPO GDB team
@@ -320,11 +320,11 @@ gbdtransformation/brands/pgtm/template.yml,sha256=PO7s1HDQM9ushIJuIX3z_dfWO-f62Y
320
320
  gbdtransformation/brands/pgtm/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
321
321
  gbdtransformation/brands/pgtm/tests/pgtm.xml,sha256=fAzAz2VtqOFV_2QImDbNxDvuTr-Ue3e5tGx8h-Lnnvg,6533
322
322
  gbdtransformation/brands/phtm/__init__.py,sha256=UHmbQDIPDdApISBKfO9tKOX6LgUQ_Ib-IVMR5kCVMTY,86
323
- gbdtransformation/brands/phtm/filters.py,sha256=yNBSktkG4dBGe_E8vxT6N4k6kwkM1A2llNLD4lHVh88,3599
323
+ gbdtransformation/brands/phtm/filters.py,sha256=jaMELkuv4Expzfl6-mr5JZiDqvMHGc0k2rXs_t-6i3g,6186
324
324
  gbdtransformation/brands/phtm/schema,sha256=Nb5tI5MUrzn19c8GpLFuJhpiLn0Fa9XPza10eNHeesI,2877
325
325
  gbdtransformation/brands/phtm/schema.classic,sha256=3JOKHUfK0jSo0NBlDmeGFAKqfYdMJOrIPBIoNUMrVFI,808
326
326
  gbdtransformation/brands/phtm/template.classic.yml,sha256=U5th90SpXjspWTPuimqftd8vZfJ3tT90mIud5n7Zv8w,2820
327
- gbdtransformation/brands/phtm/template.yml,sha256=PO7s1HDQM9ushIJuIX3z_dfWO-f62YDzBG_sYKDlnG8,34
327
+ gbdtransformation/brands/phtm/template.yml,sha256=dCUBI8kiipYp6UEU2ebvlCnyCqadJ3I9rMgUhuXGbCw,7707
328
328
  gbdtransformation/brands/qatm/__init__.py,sha256=NBdOewZ1F_3eErahjyR-up8bjz1FSxwEiPSJfDw6GxY,79
329
329
  gbdtransformation/brands/qatm/filters.py,sha256=lMPVBX2ProdUtg5LcuQAmlInoGCo1-JZemHrvE1lNvw,2330
330
330
  gbdtransformation/brands/qatm/schema,sha256=AP0MxQyD0hY4APRh8nxitlxMqJYJB4AaaTJ8y20-XBA,3283
@@ -584,9 +584,9 @@ gbdtransformation/utilities/st66.xsd,sha256=co8aFN3a5TpudllRttWmfLeiZu8ulNipfeXm
584
584
  schemas/ShazamConfig.py,sha256=D67os5B11C41h_WZ7kk54Ss0Kk7tHh8W0d_1c_aX-lY,1191
585
585
  schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
586
586
  schemas/schema_extractor.py,sha256=3-ImtnI777f6b3VA0A_w-NoXdlGz5VZMzK6MnPdQQAY,10294
587
- wipo_gbd_transformation-1.1.67.dist-info/LICENSE.md,sha256=6r2dL13EwZqSt2ellLbJRFTA-6ECIDOer4YthCfkac0,35654
588
- wipo_gbd_transformation-1.1.67.dist-info/METADATA,sha256=kQvCKqeGgGHBMExSGZSApJ94CKTrVQfSKwDHY4zvYr0,577
589
- wipo_gbd_transformation-1.1.67.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
590
- wipo_gbd_transformation-1.1.67.dist-info/entry_points.txt,sha256=NFLtlP3mPHUi-hEoUcz4CXa7vcpP8bbwd18HS4arbEk,223
591
- wipo_gbd_transformation-1.1.67.dist-info/top_level.txt,sha256=oU1j-JNLga18Fd-EV6Xl9wM8zxYoNVEzb7P8MDhTPJg,26
592
- wipo_gbd_transformation-1.1.67.dist-info/RECORD,,
587
+ wipo_gbd_transformation-1.1.69.dist-info/LICENSE.md,sha256=6r2dL13EwZqSt2ellLbJRFTA-6ECIDOer4YthCfkac0,35654
588
+ wipo_gbd_transformation-1.1.69.dist-info/METADATA,sha256=Rffs9LzOfUQ1cBm9Z6wAMK2vxa_XUieOtgXSV2P6gyA,577
589
+ wipo_gbd_transformation-1.1.69.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
590
+ wipo_gbd_transformation-1.1.69.dist-info/entry_points.txt,sha256=NFLtlP3mPHUi-hEoUcz4CXa7vcpP8bbwd18HS4arbEk,223
591
+ wipo_gbd_transformation-1.1.69.dist-info/top_level.txt,sha256=oU1j-JNLga18Fd-EV6Xl9wM8zxYoNVEzb7P8MDhTPJg,26
592
+ wipo_gbd_transformation-1.1.69.dist-info/RECORD,,