diff --git a/weboob/backends/pastealacon/backend.py b/weboob/backends/pastealacon/backend.py
index 2843fc8d..b0fdc34c 100644
--- a/weboob/backends/pastealacon/backend.py
+++ b/weboob/backends/pastealacon/backend.py
@@ -51,4 +51,7 @@ class PastealaconBackend(BaseBackend, ICapPaste):
self.browser.fill_paste(paste)
return paste
+ def post_paste(self, paste):
+ self.browser.post_paste(paste)
+
OBJECTS = {PastealaconPaste: fill_paste}
diff --git a/weboob/backends/pastealacon/browser.py b/weboob/backends/pastealacon/browser.py
index a065af42..a62348a4 100644
--- a/weboob/backends/pastealacon/browser.py
+++ b/weboob/backends/pastealacon/browser.py
@@ -17,17 +17,25 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
+from mechanize import RobustFactory
+import re
-from weboob.tools.browser import BaseBrowser
+from weboob.tools.browser import BaseBrowser, BrowserUnavailable
-from .pages import PastePage
+from .pages import PastePage, CaptchaPage, PostPage
__all__ = ['PastealaconBrowser']
class PastealaconBrowser(BaseBrowser):
DOMAIN = 'pastealacon.com'
ENCODING = 'ISO-8859-1'
- PAGES = {'http://%s/(?P\d+)' % DOMAIN: PastePage}
+ PAGES = {'http://%s/(?P\d+)' % DOMAIN: PastePage,
+ 'http://%s/%s' % (DOMAIN, re.escape('pastebin.php?captcha=1')): CaptchaPage,
+ 'http://%s/' % DOMAIN: PostPage}
+
+ def __init__(self, *args, **kwargs):
+ kwargs['factory'] = RobustFactory()
+ BaseBrowser.__init__(self, *args, **kwargs)
def fill_paste(self, paste):
"""
@@ -43,3 +51,11 @@ class PastealaconBrowser(BaseBrowser):
Returns unicode.
"""
return self.readurl('http://%s/pastebin.php?dl=%s' % (self.DOMAIN, _id)).decode(self.ENCODING)
+
+ def post_paste(self, paste):
+ self.home()
+ self.page.post(paste)
+ if self.is_on_page(CaptchaPage):
+ raise BrowserUnavailable("Detected as spam and unable to handle the captcha")
+ paste.id = self.page.get_id()
+ self.fill_paste(paste)
diff --git a/weboob/backends/pastealacon/pages.py b/weboob/backends/pastealacon/pages.py
index cca63963..d320d390 100644
--- a/weboob/backends/pastealacon/pages.py
+++ b/weboob/backends/pastealacon/pages.py
@@ -23,7 +23,7 @@ from weboob.tools.browser import BasePage
from urlparse import urlparse
import re
-__all__ = ['PastePage']
+__all__ = ['PastePage', 'PostPage', 'CaptchaPage']
class PastePage(BasePage):
def fill_paste(self, paste):
@@ -40,3 +40,14 @@ class PastePage(BasePage):
"""
path = urlparse(self.url).path
return path[1:]
+
+class PostPage(BasePage):
+ def post(self, paste):
+ self.browser.select_form(name='editor')
+ self.browser['code2'] = paste.contents.encode(self.browser.ENCODING)
+ self.browser['poster'] = paste.title.encode(self.browser.ENCODING)
+ self.browser['expiry'] = ['m']
+ self.browser.submit()
+
+class CaptchaPage(BasePage):
+ pass
diff --git a/weboob/backends/pastealacon/test.py b/weboob/backends/pastealacon/test.py
index 6847f6f9..d8261096 100644
--- a/weboob/backends/pastealacon/test.py
+++ b/weboob/backends/pastealacon/test.py
@@ -19,6 +19,8 @@
from weboob.tools.test import BackendTest
from weboob.capabilities.base import NotLoaded
+from weboob.tools.browser import BrowserUnavailable
+from .paste import PastealaconPaste
class PastealaconTest(BackendTest):
BACKEND = 'pastealacon'
@@ -37,3 +39,14 @@ class PastealaconTest(BackendTest):
assert p.title is NotLoaded
assert p.page_url == 'http://pastealacon.com/27184'
assert u'coucou\r\ncoucou\r\nhéhéhé' == p.contents
+
+ def test_post(self):
+ p = PastealaconPaste(None, title='ouiboube', contents='Weboob Test')
+ self.backend.post_paste(p)
+ assert p.id
+ assert p.title == 'ouiboube'
+ assert p.id in p.page_url
+
+ def test_spam(self):
+ p = PastealaconPaste(None, title='viagra', contents='http://example.com/')
+ self.assertRaises(BrowserUnavailable, self.backend.post_paste, p)