Skip to content

Commit 01b99ec

Browse files
authored
fix: 🐛 🎨 URLs were not built properly on Windows OS (#39)
1 parent 95e815e commit 01b99ec

File tree

11 files changed

+49
-44
lines changed

11 files changed

+49
-44
lines changed

mindee/__init__.py

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ def __init__(
3737
"""
3838
assert type(raise_on_error) == bool
3939
self.raise_on_error = raise_on_error
40-
self.base_url = "https://api.mindee.net/v1/products/mindee/"
4140
self.expense_receipt_token = expense_receipt_token
4241
self.invoice_token = invoice_token
4342
self.passport_token = passport_token
@@ -73,7 +72,6 @@ def parse_receipt(
7372

7473
response = Receipt.request(
7574
input_file,
76-
self.base_url,
7775
self.expense_receipt_token,
7876
version,
7977
include_words,
@@ -131,9 +129,7 @@ def parse_passport(
131129

132130
input_file = Inputs(file, input_type, cut_pdf=cut_pdf, n_pdf_pages=cut_pdf_mode)
133131

134-
response = Passport.request(
135-
input_file, self.base_url, self.passport_token, version
136-
)
132+
response = Passport.request(input_file, self.passport_token, version)
137133

138134
return self._wrap_response(input_file, response, "passport")
139135

@@ -163,9 +159,7 @@ def parse_license_plate(
163159

164160
input_file = Inputs(file, input_type, cut_pdf=cut_pdf, n_pdf_pages=cut_pdf_mode)
165161

166-
response = CarPlate.request(
167-
input_file, self.base_url, self.license_plate_token, version
168-
)
162+
response = CarPlate.request(input_file, self.license_plate_token, version)
169163

170164
return self._wrap_response(input_file, response, "license_plate")
171165

@@ -196,7 +190,7 @@ def parse_invoice(
196190
input_file = Inputs(file, input_type, cut_pdf=cut_pdf, n_pdf_pages=cut_pdf_mode)
197191

198192
response = Invoice.request(
199-
input_file, self.base_url, self.invoice_token, version, include_words
193+
input_file, self.invoice_token, version, include_words
200194
)
201195

202196
return self._wrap_response(input_file, response, "invoice")
@@ -229,7 +223,6 @@ def parse_financial_document(
229223

230224
response = FinancialDocument.request(
231225
input_file,
232-
self.base_url,
233226
self.expense_receipt_token,
234227
self.invoice_token,
235228
include_words,

mindee/documents/car_plate.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from mindee.documents import Document
22
from mindee.fields import Field
3-
from mindee.http import request
3+
from mindee.http import make_api_request, make_predict_url
44
import os
55

66

@@ -78,16 +78,15 @@ def compare(license_plate=None, ground_truth=None):
7878
return metrics
7979

8080
@staticmethod
81-
def request(input_file, base_url, license_plates_token=None, version="1"):
81+
def request(input_file, license_plates_token, version="1"):
8282
"""
8383
Make request to license_plates endpoint
8484
:param input_file: Input object
85-
:param base_url: API base URL
8685
:param license_plates_token: License plate API token
8786
:param version: API version
8887
"""
89-
url = os.path.join(base_url, "license_plates", "v" + version, "predict")
90-
return request(url, input_file, license_plates_token)
88+
url = make_predict_url("license_plates", version)
89+
return make_api_request(url, input_file, license_plates_token)
9190

9291
def _checklist(self):
9392
"""

mindee/documents/financial_document.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from mindee.fields.tax import Tax
66
from mindee.documents import Document
77
from mindee.fields import Field
8-
from mindee.http import request
8+
from mindee.http import make_api_request, make_predict_url
99
from mindee.documents.invoice import Invoice
1010
from mindee.documents.receipt import Receipt
1111
import os
@@ -209,25 +209,25 @@ def compare(financial_document=None, ground_truth=None):
209209
@staticmethod
210210
def request(
211211
input_file,
212-
base_url,
213-
expense_receipt_token=None,
214-
invoice_token=None,
212+
expense_receipt_token,
213+
invoice_token,
215214
include_words=False,
216215
):
217216
"""
218217
Make request to invoices endpoint if .pdf, expense_receipts otherwise
219218
:param include_words: Bool, extract all words into http_response
220219
:param input_file: Input object
221-
:param base_url: API base URL
222220
:param expense_receipt_token: Expense receipts API token
223221
:param invoice_token: Invoices API token
224222
"""
225223
if "pdf" in input_file.file_extension:
226-
url = os.path.join(base_url, "invoices", "v2", "predict")
227-
return request(url, input_file, invoice_token, include_words)
224+
url = make_predict_url("invoices", "2")
225+
return make_api_request(url, input_file, invoice_token, include_words)
228226
else:
229-
url = os.path.join(base_url, "expense_receipts", "v3", "predict")
230-
return request(url, input_file, expense_receipt_token, include_words)
227+
url = make_predict_url("expense_receipts", "3")
228+
return make_api_request(
229+
url, input_file, expense_receipt_token, include_words
230+
)
231231

232232
def _checklist(self):
233233
"""

mindee/documents/invoice.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from mindee.fields.orientation import Orientation
77
from mindee.fields.payment_details import PaymentDetails
88
from mindee.fields.tax import Tax
9-
from mindee.http import request
9+
from mindee.http import make_api_request, make_predict_url
1010
import os
1111

1212

@@ -199,19 +199,16 @@ def compare(invoice=None, ground_truth=None):
199199
return metrics
200200

201201
@staticmethod
202-
def request(
203-
input_file, base_url, invoice_token=None, version="2", include_words=False
204-
):
202+
def request(input_file, invoice_token, version="2", include_words=False):
205203
"""
206204
Make request to invoices endpoint
207205
:param input_file: Input object
208-
:param base_url: API base URL
209206
:param invoice_token: Invoices API token
210207
:param include_words: Include Mindee vision words in http_response
211208
:param version: API version
212209
"""
213-
url = os.path.join(base_url, "invoices", "v" + version, "predict")
214-
return request(url, input_file, invoice_token, include_words)
210+
url = make_predict_url("invoices", version)
211+
return make_api_request(url, input_file, invoice_token, include_words)
215212

216213
def _reconstruct(self):
217214
"""

mindee/documents/passport.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from mindee.fields import Field
33
from mindee.fields.date import Date
44
from datetime import datetime
5-
from mindee.http import request
5+
from mindee.http import make_api_request, make_predict_url
66
import os
77

88

@@ -190,12 +190,12 @@ def is_expired(self):
190190
return self.expiry_date.date_object < datetime.date(datetime.now())
191191

192192
@staticmethod
193-
def request(input_file, base_url, passport_token=None, version="1"):
193+
def request(input_file, passport_token, version="1"):
194194
"""
195195
Make request to passport endpoint
196196
"""
197-
url = os.path.join(base_url, "passport", "v" + version, "predict")
198-
return request(url, input_file, passport_token)
197+
url = make_predict_url("passport", version)
198+
return make_api_request(url, input_file, passport_token)
199199

200200
def _reconstruct(self):
201201
"""

mindee/documents/receipt.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from mindee.fields.locale import Locale
66
from mindee.fields.orientation import Orientation
77
from mindee.fields.tax import Tax
8-
from mindee.http import request
8+
from mindee.http import make_api_request, make_predict_url
99
import os
1010

1111

@@ -176,21 +176,19 @@ def compare(receipt=None, ground_truth=None):
176176
@staticmethod
177177
def request(
178178
input_file,
179-
base_url,
180-
expense_receipt_token=None,
179+
expense_receipt_token,
181180
version="3",
182181
include_words=False,
183182
):
184183
"""
185184
Make request to expense_receipts endpoint
186185
:param input_file: Input object
187-
:param base_url: API base URL
188186
:param expense_receipt_token: Expense_receipts API token
189187
:param include_words: Include Mindee vision words in http_response
190188
:param version: API version
191189
"""
192-
url = os.path.join(base_url, "expense_receipts", "v" + version, "predict")
193-
return request(url, input_file, expense_receipt_token, include_words)
190+
url = make_predict_url("expense_receipts", version)
191+
return make_api_request(url, input_file, expense_receipt_token, include_words)
194192

195193
def _checklist(self):
196194
"""

mindee/http.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
11
import requests
22
from mindee.versions import __version__, python_version, get_platform
33

4+
MINDEE_API_URL = "https://api.mindee.net/v1"
5+
46
platform = get_platform()
57

68

7-
def request(url, input_file, token, include_words=False):
9+
def make_predict_url(product: str, version: str, owner: str = "mindee") -> str:
10+
"""
11+
Returns full HTTP URL for a prediction request at specific version
12+
:param product: product API name
13+
:param version: product model version
14+
:param owner: product owner (mindee for off-the-shelf APIs)
15+
:return: The full URL, i.e. https://api.mindee.net/v1/products/mindee/invoices/2/predict
16+
"""
17+
return f"{MINDEE_API_URL}/products/{owner}/{product}/v{version}/predict"
18+
19+
20+
def make_api_request(url: str, input_file, token: str, include_words: bool = False):
821
"""
922
:param input_file: Input object
1023
:param url: Endpoint url

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,6 @@
22
line-length = 88
33
target-version = ['py35', 'py36', 'py37']
44
include = '\.pyi?$'
5+
6+
[tool.mypy]
7+
ignore_missing_imports = true

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[tool:pytest]
2-
addopts = --pyargs --cov-fail-under 80 --cov-config=.coveragerc --cov mindee --cov-report term:skip-covered --cov-report term-missing
2+
addopts = --pyargs --cov-fail-under 85 --cov-config=.coveragerc --cov mindee --cov-report term:skip-covered --cov-report term-missing
33
python_files = test*.py
44
junit_family = xunit2

tests/data/expense_receipts/receipt.txt

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)