Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
indicators-parser-saas
backend
Commits
2716906d
Verified
Commit
2716906d
authored
2 years ago
by
Власов Иван Юрьевич
Browse files
Options
Download
Patches
Plain Diff
Created availability to send url link for parsing
parent
d3d37944
master
No related merge requests found
Pipeline
#98900
passed with stage
in 1 minute and 6 seconds
Changes
5
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
endpoints/__init__.py
+1
-1
endpoints/__init__.py
endpoints/parser.py
+21
-2
endpoints/parser.py
endpoints/routes.py
+2
-1
endpoints/routes.py
responses/errors.py
+7
-0
responses/errors.py
tests/test_indicator.py
+30
-0
tests/test_indicator.py
with
61 additions
and
4 deletions
+61
-4
endpoints/__init__.py
+
1
−
1
View file @
2716906d
...
@@ -4,5 +4,5 @@ from .user import get_me, create_bot_token, get_bot_tokens, delete_bot_token
...
@@ -4,5 +4,5 @@ from .user import get_me, create_bot_token, get_bot_tokens, delete_bot_token
from
.parser
import
load_report
from
.parser
import
load_report
from
.indicators
import
get_indicators_from_group
,
get_indicator_groups
from
.indicators
import
get_indicators_from_group
,
get_indicator_groups
from
.watcher
import
create_watcher
from
.watcher
import
create_watcher
from
.parser
import
get_reports
from
.parser
import
get_reports
,
get_page_report
from
.static
import
token
from
.static
import
token
This diff is collapsed.
Click to expand it.
endpoints/parser.py
+
21
−
2
View file @
2716906d
...
@@ -2,6 +2,7 @@ import os
...
@@ -2,6 +2,7 @@ import os
from
uuid
import
uuid4
from
uuid
import
uuid4
from
tempfile
import
NamedTemporaryFile
from
tempfile
import
NamedTemporaryFile
from
aiohttp
import
request
as
aiohttp_request
from
starlette.background
import
BackgroundTasks
from
starlette.background
import
BackgroundTasks
from
starlette.datastructures
import
UploadFile
from
starlette.datastructures
import
UploadFile
from
starlette.requests
import
Request
from
starlette.requests
import
Request
...
@@ -11,8 +12,8 @@ from models import Report, IndicatorGroup
...
@@ -11,8 +12,8 @@ from models import Report, IndicatorGroup
from
models.indicator
import
IndicatorGroupPD
from
models.indicator
import
IndicatorGroupPD
from
models.report
import
ReportPD
from
models.report
import
ReportPD
from
parsers.pdf_parser
import
process_pdf
from
parsers.pdf_parser
import
process_pdf
from
parsers.text_parser
import
CollectedData
from
parsers.text_parser
import
CollectedData
,
find_ioc
from
responses.errors
import
ReportNotPresented
from
responses.errors
import
ReportNotPresented
,
ReportURLError
from
responses.responses
import
OkResponse
from
responses.responses
import
OkResponse
...
@@ -50,3 +51,21 @@ async def get_reports(request: Request):
...
@@ -50,3 +51,21 @@ async def get_reports(request: Request):
report
.
owner
=
request
.
state
.
user
report
.
owner
=
request
.
state
.
user
as_pd
.
append
(
ReportPD
.
from_orm
(
report
))
as_pd
.
append
(
ReportPD
.
from_orm
(
report
))
return
OkResponse
(
as_pd
)
return
OkResponse
(
as_pd
)
async
def
get_page_report
(
request
:
Request
):
""" Creates group from news page """
url
=
request
.
query_params
[
"url"
]
try
:
async
with
aiohttp_request
(
"GET"
,
url
)
as
resp
:
page
=
await
resp
.
text
()
if
resp
.
status
!=
200
:
raise
ReportURLError
except
Exception
:
raise
ReportURLError
data
=
find_ioc
(
page
.
lower
())
group
=
await
IndicatorGroup
.
from_reports_collected_data
(
data
,
request
.
state
.
user
)
group
.
description
=
"Group from page "
+
url
await
group
.
save
()
group_pd
=
IndicatorGroupPD
.
from_orm
(
group
)
return
OkResponse
({
"indicator_group"
:
group_pd
})
This diff is collapsed.
Click to expand it.
endpoints/routes.py
+
2
−
1
View file @
2716906d
...
@@ -20,7 +20,8 @@ api_routes = [
...
@@ -20,7 +20,8 @@ api_routes = [
Route
(
"/deleteBotToken"
,
delete_bot_token
,
methods
=
[
"GET"
]),
Route
(
"/deleteBotToken"
,
delete_bot_token
,
methods
=
[
"GET"
]),
Route
(
"/createWatcher"
,
create_watcher
,
methods
=
[
"POST"
]),
Route
(
"/createWatcher"
,
create_watcher
,
methods
=
[
"POST"
]),
Route
(
"/getIndicatorGroups"
,
get_indicator_groups
,
methods
=
[
"GET"
]),
Route
(
"/getIndicatorGroups"
,
get_indicator_groups
,
methods
=
[
"GET"
]),
Route
(
"/getReports"
,
get_reports
,
methods
=
[
"GET"
])
Route
(
"/getReports"
,
get_reports
,
methods
=
[
"GET"
]),
Route
(
"/loadPageReport"
,
get_page_report
,
methods
=
[
"GET"
]),
]
]
admin_routes
=
[]
admin_routes
=
[]
...
...
This diff is collapsed.
Click to expand it.
responses/errors.py
+
7
−
0
View file @
2716906d
...
@@ -87,3 +87,10 @@ class TelegramInvalidLink(ApiError):
...
@@ -87,3 +87,10 @@ class TelegramInvalidLink(ApiError):
code
=
604
code
=
604
description
=
"Telegram channel join link is invalid"
description
=
"Telegram channel join link is invalid"
http_code
=
400
http_code
=
400
class
ReportURLError
(
ApiError
):
""" Report URL is invalid """
code
=
701
description
=
"Report URL is invalid, or 200 status code is not returned"
http_code
=
422
This diff is collapsed.
Click to expand it.
tests/test_indicator.py
+
30
−
0
View file @
2716906d
...
@@ -107,3 +107,33 @@ def test_reports_endpoint(sti_auth, user, mts_report):
...
@@ -107,3 +107,33 @@ def test_reports_endpoint(sti_auth, user, mts_report):
assert
1
==
len
(
resp_reports
.
json
()[
"data"
])
assert
1
==
len
(
resp_reports
.
json
()[
"data"
])
print
(
resp_reports
.
json
())
print
(
resp_reports
.
json
())
assert
resp_reports
.
json
()[
"data"
][
0
][
"id"
]
==
report_id
assert
resp_reports
.
json
()[
"data"
][
0
][
"id"
]
==
report_id
def
test_parse_link_report_empty
(
sti_auth
):
test_url
=
"https://storage.yandexcloud.net/ivanprogramming/empty_report.html"
resp
=
sti_auth
.
get
(
f
"/api/loadPageReport?url=
{
test_url
}
"
)
assert
resp
.
status_code
==
200
data
=
resp
.
json
()[
"data"
]
report_id
=
data
[
"indicator_group"
][
"id"
]
resp
=
sti_auth
.
get
(
f
"/api/getIndicatorsFromGroup?group_id=
{
report_id
}
"
)
assert
resp
.
status_code
==
200
assert
len
(
resp
.
json
()[
"data"
][
"indicators"
])
==
0
def
test_parse_link_report
(
sti_auth
):
test_url
=
"https://storage.yandexcloud.net/ivanprogramming/report.html"
resp
=
sti_auth
.
get
(
f
"/api/loadPageReport?url=
{
test_url
}
"
)
assert
resp
.
status_code
==
200
data
=
resp
.
json
()[
"data"
]
report_id
=
data
[
"indicator_group"
][
"id"
]
resp
=
sti_auth
.
get
(
f
"/api/getIndicatorsFromGroup?group_id=
{
report_id
}
"
)
assert
resp
.
status_code
==
200
assert
len
(
resp
.
json
()[
"data"
][
"indicators"
])
==
3
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets