Дипломная работа: Автоматизация процесса введения документации и отчетности в ООО "Аэрофильтр"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
86
session = await get_session(request)
if session.get("user"):
return await handler(request)
elif check_path(request.path):
raise web.HTTPFound(request.app.router['employees.login']._path)
else:
return await handler(request)
async def db_handler(app, handler):
async def middleware(request):
if request.path.startswith('/static/') or request.path.startswith('/_debugtoolbar'):
response = await handler(request)
return response
request.db = app.db
response = await handler(request)
return response
return middleware
from components.employees.views import Login, Logout, EmployeesMain,
AddEmployee
from components.documents.views import AddNew, Download
87
from components.clients.views import AddClient, ClientsMain
from components.contractors.views import AddContractors, ContractorsMain
from components.departments.views import AddDepartment, DepartmentsMain
from components.document_categories.views import AddDocumentCategory,
DocumentCategoriesMain
from components.document_types.views import AddDocumentType,
DocumentTypesMain
from components.positions.views import AddPosition, PositionsMain
from views import main_view
routes = [
('*', '/', main_view.MainView, 'main'),
('*', '/login', Login, 'employees.login'),
('*', '/logout', Logout, 'employees.logout'),
('*', '/employees', EmployeesMain, 'employees.main'),
('*', '/employees/new', AddEmployee, 'employees.add_new'),
('*', '/clients', ClientsMain, 'clients.main'),
('*', '/clients/new', AddClient, 'clients.add_new'),
('*', '/contractors', ContractorsMain, 'contractors.main'),
('*', '/contractors/new', AddContractors, 'contractors.add_new'),
('*', '/departments', DepartmentsMain, 'departments.main'),
('*', '/departments/new', AddDepartment, 'departments.add_new'),
88
('*', '/document_categories', DocumentCategoriesMain, 'document_categories.main'),
('*', '/document_categories/new', AddDocumentCategory,
'document_categories.add_new'),
('*', '/document_types', DocumentTypesMain, 'document_types.main'),
('*', '/document_types/new', AddDocumentType, 'document_types.add_new'),
('*', '/positions', PositionsMain, 'positions.main'),
('*', '/positions/new', AddPosition, 'positions.add_new'),
('*', '/documents/new', AddNew, 'documents.add_new'),
('*', '/documents/{id:(\w+)}/download', Download, 'documents.download'),
]
from bson.objectid import ObjectId
from motor.motor_asyncio import AsyncIOMotorGridFS
from utils.document_utils import detect_mime, get_words_from_xlsx,
get_words_from_docx, get_words
class Document():
def __init__(self, db, **kwargs):
self.collection = db['documents']
89
self.gridfs = AsyncIOMotorGridFS(db)
async def get_latest_documents(self, access_level, count=20, offset=0, query=''):
q = {
'$or': [
{'access_level': {'$gte': access_level}},
{'access_level': -1}
]
}
if query:
q.update({'$text': {'$search': query}})
result = await self.collection.find(q).sort(
[('created', 1)]).to_list(
length=count)
return result
async def insert_new(self, doc):
await self.collection.insert(doc)
async def process_document(self, doc):
90
filepath = doc.pop('filepath')
mime = detect_mime(filepath)
if not mime:
return
if 'officedocument.spreadsheetml' in mime:
doc['words'] = get_words_from_xlsx(filepath)
elif 'officedocument.wordprocessingml' in mime:
doc['words'] = get_words_from_docx(filepath)
elif 'zip' in mime:
doc['words'] = get_words(filepath)
else:
return
with open(filepath, 'b+r') as f:
doc['fileid'] = await self.gridfs.put(f, filename=doc['filename'],
content_type=mime)
await self.insert_new(doc)
return True
async def download(self, doc_id):
doc = await self.collection.find_one({'_id': ObjectId(doc_id)})
Источник: https://baza.diplomsite.ru/previewfile/2029