# -*- coding: utf-8 -*- # Copyright(C) 2015 Vincent A # # This file is part of a woob module. # # This woob module is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This woob module is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this woob module. If not, see . # flake8: compatible from base64 import b64decode, b64encode import math from io import BytesIO from urllib.parse import urljoin from woob.browser import PagesBrowser, URL from .pages import ImagePage, UploadPage class LutimBrowser(PagesBrowser): BASEURL = 'https://lut.im' image_page = URL('(?P.+)', ImagePage) upload_page = URL('', UploadPage) def __init__(self, base_url, *args, **kw): PagesBrowser.__init__(self, *args, **kw) self.base_url = self.BASEURL = base_url def fetch(self, paste): self.location(paste.id) assert self.image_page.is_here() paste.contents = b64encode(self.page.contents).decode('ascii') paste.title = self.page.filename def post(self, paste, max_age=0): bin = b64decode(paste.contents) name = paste.title or 'file' # filename is mandatory filefield = {'file': (name, BytesIO(bin))} params = {'format': 'json'} if max_age: params['delete-day'] = int(math.ceil(max_age / 86400.)) self.location(self.BASEURL, data=params, files=filefield) assert self.upload_page.is_here() info = self.page.fetch_info() paste.id = urljoin(self.base_url, info['short'])