diff --git a/weboob/backends/pastealacon/__init__.py b/weboob/backends/pastealacon/__init__.py
new file mode 100644
index 00000000..87a01991
--- /dev/null
+++ b/weboob/backends/pastealacon/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+
+# Copyright(C) 2011 Laurent Bachelier
+#
+# This file is part of weboob.
+#
+# weboob 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.
+#
+# weboob 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 weboob. If not, see .
+
+from .backend import PastealaconBackend
+
+__all__ = ['PastealaconBackend']
diff --git a/weboob/backends/pastealacon/backend.py b/weboob/backends/pastealacon/backend.py
new file mode 100644
index 00000000..2843fc8d
--- /dev/null
+++ b/weboob/backends/pastealacon/backend.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+
+# Copyright(C) 2011 Laurent Bachelier
+#
+# This file is part of weboob.
+#
+# weboob 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.
+#
+# weboob 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 weboob. If not, see .
+
+
+from weboob.capabilities.paste import ICapPaste
+from weboob.tools.backend import BaseBackend
+from weboob.capabilities.base import NotLoaded
+
+from .browser import PastealaconBrowser
+from .paste import PastealaconPaste
+
+
+__all__ = ['PastealaconBackend']
+
+
+class PastealaconBackend(BaseBackend, ICapPaste):
+ NAME = 'pastealacon'
+ MAINTAINER = 'Laurent Bachelier'
+ EMAIL = 'laurent@bachelier.name'
+ VERSION = '0.8'
+ DESCRIPTION = 'Paste a la con paste tool'
+ LICENSE = 'AGPLv3+'
+ BROWSER = PastealaconBrowser
+
+ def get_paste(self, _id):
+ return PastealaconPaste(_id)
+
+ def fill_paste(self, paste, fields):
+ # if we only want the contents
+ if fields == ['contents']:
+ if paste.contents is NotLoaded:
+ contents = self.browser.get_contents(paste.id)
+ paste.contents = contents
+ elif fields:
+ self.browser.fill_paste(paste)
+ return paste
+
+ OBJECTS = {PastealaconPaste: fill_paste}
diff --git a/weboob/backends/pastealacon/browser.py b/weboob/backends/pastealacon/browser.py
new file mode 100644
index 00000000..a065af42
--- /dev/null
+++ b/weboob/backends/pastealacon/browser.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+
+# Copyright(C) 2011 Laurent Bachelier
+#
+# This file is part of weboob.
+#
+# weboob 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.
+#
+# weboob 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 weboob. If not, see .
+
+
+from weboob.tools.browser import BaseBrowser
+
+from .pages import PastePage
+
+__all__ = ['PastealaconBrowser']
+
+class PastealaconBrowser(BaseBrowser):
+ DOMAIN = 'pastealacon.com'
+ ENCODING = 'ISO-8859-1'
+ PAGES = {'http://%s/(?P\d+)' % DOMAIN: PastePage}
+
+ def fill_paste(self, paste):
+ """
+ Get as much as information possible from the paste page
+ """
+ self.location(paste.page_url)
+ return self.page.fill_paste(paste)
+
+ def get_contents(self, _id):
+ """
+ Get the contents from the raw URL
+ This is the fastest and safest method if you only want the content.
+ Returns unicode.
+ """
+ return self.readurl('http://%s/pastebin.php?dl=%s' % (self.DOMAIN, _id)).decode(self.ENCODING)
diff --git a/weboob/backends/pastealacon/pages.py b/weboob/backends/pastealacon/pages.py
new file mode 100644
index 00000000..cca63963
--- /dev/null
+++ b/weboob/backends/pastealacon/pages.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+# Copyright(C) 2011 Laurent Bachelier
+#
+# This file is part of weboob.
+#
+# weboob 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.
+#
+# weboob 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 weboob. If not, see .
+
+
+from weboob.tools.browser import BasePage
+
+from urlparse import urlparse
+import re
+
+__all__ = ['PastePage']
+
+class PastePage(BasePage):
+ def fill_paste(self, paste):
+ root = self.document.getroot()
+ header = self.parser.select(root, 'id("content")//h3', 1, 'xpath')
+ matches = re.match(r'Posted by (?P.+) on (?P.+) \(', header.text)
+ paste.title = matches.groupdict().get('author')
+ paste.contents = self.parser.select(root, '//textarea[@id="code"]', 1, 'xpath').text
+ return paste
+
+ def get_id(self):
+ """
+ Find out the ID from the URL
+ """
+ path = urlparse(self.url).path
+ return path[1:]
diff --git a/weboob/backends/pastealacon/paste.py b/weboob/backends/pastealacon/paste.py
new file mode 100644
index 00000000..7b7c2a1e
--- /dev/null
+++ b/weboob/backends/pastealacon/paste.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+
+# Copyright(C) 2011 Laurent Bachelier
+#
+# This file is part of weboob.
+#
+# weboob 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.
+#
+# weboob 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 weboob. If not, see .
+
+
+from weboob.capabilities.paste import BasePaste
+
+
+__all__ = ['PastealaconPaste']
+
+
+class PastealaconPaste(BasePaste):
+ @classmethod
+ def id2url(cls, _id):
+ return 'http://pastealacon.com/%s' % _id
diff --git a/weboob/backends/pastealacon/test.py b/weboob/backends/pastealacon/test.py
new file mode 100644
index 00000000..6847f6f9
--- /dev/null
+++ b/weboob/backends/pastealacon/test.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+
+# Copyright(C) 2011 Laurent Bachelier
+#
+# This file is part of weboob.
+#
+# weboob 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.
+#
+# weboob 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 weboob. If not, see .
+
+from weboob.tools.test import BackendTest
+from weboob.capabilities.base import NotLoaded
+
+class PastealaconTest(BackendTest):
+ BACKEND = 'pastealacon'
+
+ def test_get_paste(self):
+ # html method
+ p = self.backend.get_paste('27184')
+ self.backend.fillobj(p, ['title'])
+ assert p.title == 'ouiboube'
+ assert p.page_url == 'http://pastealacon.com/27184'
+ assert u'coucou\r\ncoucou\r\nhéhéhé' == p.contents
+
+ # raw method
+ p = self.backend.get_paste('27184')
+ self.backend.fillobj(p, ['contents'])
+ assert p.title is NotLoaded
+ assert p.page_url == 'http://pastealacon.com/27184'
+ assert u'coucou\r\ncoucou\r\nhéhéhé' == p.contents