This commit is contained in:
olczig 2023-01-28 22:13:05 +01:00
parent 13ff3b8c8b
commit 064ca5140e
12 changed files with 146 additions and 5 deletions

View File

@ -1,4 +1,4 @@
1) Aby kod uruchomił się poprawnie należy uzupełnić zmienne:
1) Aby kod uruchomił się poprawnie należy uzupełnić zmienne w pliku aws.py:
- aws_access_key_id (należy znaleźć na stronie AWS)
- aws_secret_access_key (należy znaleźć na stronie AWS)
- aws_session_token (należy znaleźć na stronie AWS)

View File

@ -1,9 +1,9 @@
# niezbędna konfiguracja danych dostępowych, pamiętaj aby nigdy jej nie udostępniać publicznie
aws_access_key_id=''
aws_secret_access_key=''
aws_session_token=''
aws_access_key_id=""
aws_secret_access_key=""
aws_session_token=""
VPC=''
ID=''
ID='s-444376'
# biblioteka dostępowa do AWS

View File

View File

@ -0,0 +1,7 @@
FROM python:3.8
COPY api.py requirements.txt ./
RUN apt-get update
RUN apt-get install -y default-jdk
RUN pip install -r requirements.txt
EXPOSE 80:8000/tcp
CMD python api.py

40
Zadanie_5.2_5.3/api.py Normal file
View File

@ -0,0 +1,40 @@
from fastapi import FastAPI, UploadFile
from fastapi.middleware.cors import CORSMiddleware
from tika import parser
import uvicorn
import re
#Celem jest wyekstrahowanie nazwy sprzedawcy, jego numeru NIP oraz kwoty łącznej brutto faktury
def parse(pdf):
content = parser.from_buffer(pdf)
content = content['content'].split('\n')
content = [c for c in content if c != '']
total = float(re.findall(r'\d+[.]\d+', list(filter(lambda x: 'Razem' in x, content))[0])[-1])
content = content[content.index('Sprzedawca:') : content.index('Nabywca:')]
seller = content[1]
nip = content[-1].replace('NIP: ', '')
return {
'vat_id' : nip,
'address' : seller,
'total' : total
}
app = FastAPI()
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.post('/invoice')
async def root(file: UploadFile):
return parse(file.file.read())
uvicorn.run(app, host="0.0.0.0", port=8000)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,22 @@
<html>
<head>
<script>
async function parse(){
document.getElementById("result").innerHTML = "Submitting..."
var data = new FormData()
data.append('file', document.getElementById("docpicker").files[0])
document.getElementById("result").innerHTML = "Fetching..."
resp = await fetch('http://:80/invoice', {method: "POST", body: data})
document.getElementById("result").innerHTML = "Fetched..."
data = await resp.json()
var result = JSON.stringify(data)
document.getElementById("result").innerHTML = result
}
</script>
<title>Chmuuuuuuurki</title>
</head>
<body>
<input type="file" id="docpicker" accept=".pdf" onchange="parse()" />
<p id="result"></p>
</body>
</html>

55
Zadanie_5.2_5.3/main.py Normal file
View File

@ -0,0 +1,55 @@
aws_access_key_id=''
aws_secret_access_key=''
aws_session_token=''
VPC=''
ID='444376'
import boto3
ec2 = boto3.resource(
'ec2',
region_name='us-east-1',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token,
)
key_pair = ec2.create_key_pair(
KeyName=ID+'-KEY-PAIR',
KeyType='ed25519',
KeyFormat='pem',
)
security_group = ec2.create_security_group(
Description=ID+'-GROUP',
GroupName=ID+'-GROUP',
VpcId=VPC
)
inbound_rules = security_group.authorize_ingress(
GroupId=security_group.group_id,
CidrIp='0.0.0.0/0',
IpProtocol='tcp',
FromPort=80,
ToPort=80
)
instances = ec2.create_instances(
ImageId='ami-0b5eea76982371e91',
MinCount=1,
MaxCount=1,
InstanceType='t2.micro',
KeyName=key_pair.name,
UserData=f'''
#!/bin/bash
sudo yum update -y
sudo yum install git -y
git clone git clone https://git.wmi.amu.edu.pl/s444376/DPZC_Ola.git
cd DPZC_Ola/Zadanie_5.2_5.3
sudo yum install docker -y
sudo service docker start
sudo usermod -a -G docker ec2-user
sudo docker build -t invoice .
sudo docker run -d -p 80:8000 -t invoice
''',
SecurityGroups=[security_group.group_name]
)

View File

@ -0,0 +1,4 @@
fastapi
tika
uvicorn
python-multipart

View File

@ -0,0 +1,13 @@
{
"Id": "MyPolicy",
"Version": "2023-01-22",
"Statement": [
{
"Sid": "PublicReadForGetBucketObjects",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::olusza/*"
}
]
}