Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cloudbot/util/web.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@

# Constants
DEFAULT_SHORTENER = "is.gd"
DEFAULT_PASTEBIN = ""
DEFAULT_PASTEBIN = "sharey"

HASTEBIN_SERVER = "https://hastebin.com"

Expand Down
26 changes: 12 additions & 14 deletions plugins/pastebins/sprunge.py → plugins/pastebins/sharey.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import json

import requests
from requests import HTTPError, RequestException

Expand All @@ -10,25 +12,21 @@
)


class Sprunge(Pastebin):
class Sharey(Pastebin):
def __init__(self, base_url) -> None:
super().__init__()
self.url = base_url

def paste(self, data, ext) -> str:
if isinstance(data, str):
encoded = data.encode()
else:
encoded = data

params = {
"sprunge": encoded,
}
def paste(self, data: str | bytes, ext: str) -> str:
try:
encoded = json.loads(data)
except json.JSONDecodeError:
encoded = {"content": data}

try:
with requests.post(self.url, data=params) as response:
with requests.post(self.url, json=encoded) as response:
response.raise_for_status()
url = response.text.strip()
url = response.json()["url"]
except HTTPError as e:
r = e.response
raise ServiceHTTPError(r.reason, r) from e
Expand All @@ -43,9 +41,9 @@ def paste(self, data, ext) -> str:

@hook.on_start()
def register() -> None:
pastebins.register("sprunge", Sprunge("http://sprunge.us"))
pastebins.register("sharey", Sharey("https://sharey.org/api/paste"))


@hook.on_stop()
def unregister() -> None:
pastebins.remove("sprunge")
pastebins.remove("sharey")
92 changes: 92 additions & 0 deletions tests/plugin_tests/test_paste_sharey.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
import json

import pytest

from cloudbot.util import web
from plugins.pastebins import sharey


def test_register() -> None:
sharey.register()

assert web.pastebins.get("sharey") is not None

sharey.unregister()

assert web.pastebins.get("sharey") is None


def test_paste(mock_requests) -> None:
sharey.register()

paster = web.pastebins["sharey"]

mock_requests.add(
"POST",
"https://sharey.org/api/paste",
json={"url": "https://sharey.org/foobar"},
)
assert paster.paste("test data", "txt") == "https://sharey.org/foobar?txt"
sharey.unregister()


def test_data_params(mock_requests) -> None:
sharey.register()

body: str | bytes | None = None

def req_cb(req):
nonlocal body
body = req.body
return 200, {}, json.dumps({"url": "https://sharey.org/foobar"})

paster = web.pastebins["sharey"]
mock_requests.add_callback(
"POST", "https://sharey.org/api/paste", callback=req_cb
)
assert paster.paste("test data", "txt") == "https://sharey.org/foobar?txt"
assert body is not None
assert json.loads(body) == {"content": "test data"}
sharey.unregister()


def test_paste_json_input(mock_requests) -> None:
sharey.register()

body: str | bytes | None = None

def req_cb(req):
nonlocal body
body = req.body
return 200, {}, json.dumps({"url": "https://sharey.org/foobar"})

paster = web.pastebins["sharey"]
mock_requests.add_callback(
"POST", "https://sharey.org/api/paste", callback=req_cb
)
assert (
paster.paste('{"foo": "bar"}', "txt") == "https://sharey.org/foobar?txt"
)
assert body is not None
assert json.loads(body) == {"foo": "bar"}
sharey.unregister()


def test_paste_error(mock_requests) -> None:
sharey.register()

paster = web.pastebins["sharey"]

with pytest.raises(web.ServiceError):
paster.paste("test data", "txt")

mock_requests.add(
"POST",
"https://sharey.org/api/paste",
status=500,
)

with pytest.raises(web.ServiceHTTPError):
paster.paste("test data", "txt")

sharey.unregister()
75 changes: 0 additions & 75 deletions tests/plugin_tests/test_paste_sprunge.py

This file was deleted.