Skip to content

Commit 2109ae7

Browse files
authored
Document source (#60)
## Изменения При отправке файла на печать теперь также указывается источник отправки. ## Реализации Добавлен параметр source в POST-ручке /file, а также добавлена строчка в БД. ## Детали В JSON-модель добавлен string-параметр source, а также в БД File добавлено поле source. ## Check-List - [x] Вы проверили свой код перед отправкой запроса? - [x] Вы написали тесты к реализованным функциям? - [x] Вы не забыли применить black и isort?
1 parent 9d9c4ef commit 2109ae7

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""add_document_source
2+
3+
Revision ID: a68c6bb2972c
4+
Revises: d63e9f7661dd
5+
Create Date: 2023-07-26 22:56:57.273888
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
11+
12+
# revision identifiers, used by Alembic.
13+
revision = 'a68c6bb2972c'
14+
down_revision = 'd63e9f7661dd'
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
op.add_column('file', sa.Column('source', sa.String(), nullable=True))
21+
22+
23+
def downgrade():
24+
op.drop_column('file', 'source')

print_service/models/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class File(Model):
4242
DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow
4343
)
4444
number_of_pages: Mapped[int] = Column(Integer)
45+
source: Mapped[str] = Column(String, default='unknown', nullable=False)
4546

4647
owner: Mapped[UnionMember] = relationship('UnionMember', back_populates='files')
4748
print_facts: Mapped[list[PrintFact]] = relationship('PrintFact', back_populates='file')
@@ -88,5 +89,4 @@ class PrintFact(Model):
8889

8990
owner: Mapped[UnionMember] = relationship('UnionMember', back_populates='print_facts')
9091
file: Mapped[File] = relationship('File', back_populates='print_facts')
91-
9292
sheets_used: Mapped[int] = Column(Integer)

print_service/routes/file.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class SendInput(BaseModel):
7171
description='Название файла',
7272
example='filename.pdf',
7373
)
74+
source: str | None = None
7475
options: PrintOptions = PrintOptions()
7576

7677

@@ -128,7 +129,7 @@ async def send(inp: SendInput, settings: Settings = Depends(get_settings)):
128129
except RuntimeError:
129130
raise PINGenerateError()
130131
filename = generate_filename(inp.filename)
131-
file_model = FileModel(pin=pin, file=filename)
132+
file_model = FileModel(pin=pin, file=filename, source=inp.source)
132133
file_model.owner = user
133134
file_model.option_copies = inp.options.copies
134135
file_model.option_pages = inp.options.pages

tests/test_routes/test_file.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,27 @@ def test_post_success(union_member_user, client, dbsession):
2020
"surname": union_member_user['surname'],
2121
"number": union_member_user['union_number'],
2222
"filename": "filename.pdf",
23+
"source": "webapp",
2324
"options": {"pages": "", "copies": 1, "two_sided": False},
2425
}
2526
res = client.post(url, data=json.dumps(body))
2627
assert res.status_code == status.HTTP_200_OK
2728
db_file = dbsession.query(File).filter(File.pin == res.json()['pin']).one_or_none()
2829
assert db_file is not None
30+
assert db_file.source == 'webapp'
31+
body2 = {
32+
"surname": union_member_user['surname'],
33+
"number": union_member_user['union_number'],
34+
"filename": "filename2.pdf",
35+
"options": {"pages": "", "copies": 1, "two_sided": False},
36+
}
37+
res2 = client.post(url, data=json.dumps(body2))
38+
assert res2.status_code == status.HTTP_200_OK
39+
db_file2 = dbsession.query(File).filter(File.pin == res2.json()['pin']).one_or_none()
40+
assert db_file2 is not None
41+
assert db_file2.source == 'unknown'
2942
dbsession.delete(db_file)
43+
dbsession.delete(db_file2)
3044
dbsession.commit()
3145

3246

@@ -35,6 +49,7 @@ def test_post_unauthorized_user(client):
3549
"surname": 'surname',
3650
"number": 'union_number',
3751
"filename": "filename.pdf",
52+
"source": "vkbot",
3853
"options": {"pages": "", "copies": 1, "two_sided": False},
3954
}
4055
res = client.post(url, data=json.dumps(body))

0 commit comments

Comments
 (0)