from rest_framework.exceptions import ParseError
from rest_framework.response import Response
from rest_framework.views import APIView
class HealthcheckView(APIView):
"""
Provides a simple view to check that the website is alive and well.
## Routes
### GET /healthcheck
Returns a simple JSON document showcasing whether the system is working:
>>> {
... 'status': 'ok'
... }
Seems to be.
## Authentication
Does not require any authentication nor permissions.
"""
authentication_classes = ()
permission_classes = ()
def get(self, request, format=None): # noqa
return Response({'status': 'ok'})
class RulesView(APIView):
"""
Return a list of the server's rules.
## Routes
### GET /rules
Returns a JSON array containing the server's rules:
>>> [
... "Eat candy.",
... "Wake up at 4 AM.",
... "Take your medicine."
... ]
Since some of the the rules require links, this view
gives you the option to return rules in either Markdown
or HTML format by specifying the `link_format` query parameter
as either `md` or `html`. Specifying a different value than
`md` or `html` will return 400.
## Authentication
Does not require any authentication nor permissions.
"""
authentication_classes = ()
permission_classes = ()
@staticmethod
def _format_link(description, link, target):
"""
Build the markup necessary to render `link` with `description`
as its description in the given `target` language.
Arguments:
description (str):
A textual description of the string. Represents the content
between the `` tags in HTML, or the content between the
array brackets in Markdown.
link (str):
The resulting link that a user should be redirected to
upon clicking the generated element.
target (str):
One of `{'md', 'html'}`, denoting the target format that the
link should be rendered in.
Returns:
str:
The link, rendered appropriately for the given `target` format
using `description` as its textual description.
Raises:
ValueError:
If `target` is not `'md'` or `'html'`.
"""
if target == 'html':
return f'{description}'
elif target == 'md':
return f'[{description}]({link})'
else:
raise ValueError(
f"Can only template links to `html` or `md`, got `{target}`"
)
# `format` here is the result format, we have a link format here instead.
def get(self, request, format=None): # noqa
link_format = request.query_params.get('link_format', 'md')
if link_format not in ('html', 'md'):
raise ParseError(
f"`format` must be `html` or `md`, got `{format}`."
)
discord_community_guidelines_link = self._format_link(
'Discord Community Guidelines',
'https://discordapp.com/guidelines',
link_format
)
channels_page_link = self._format_link(
'channels page',
'https://pythondiscord.com/about/channels',
link_format
)
google_translate_link = self._format_link(
'Google Translate',
'https://translate.google.com/',
link_format
)
return Response([
"Be polite, and do not spam.",
f"Follow the {discord_community_guidelines_link}.",
(
"Don't intentionally make other people uncomfortable - if "
"someone asks you to stop discussing something, you should stop."
),
(
"Be patient both with users asking "
"questions, and the users answering them."
),
(
"We will not help you with anything that might break a law or the "
"terms of service of any other community, site, service, or "
"otherwise - No piracy, brute-forcing, captcha circumvention, "
"sneaker bots, or anything else of that nature."
),
(
"Listen to and respect the staff members - we're "
"here to help, but we're all human beings."
),
(
"All discussion should be kept within the relevant "
"channels for the subject - See the "
f"{channels_page_link} for more information."
),
(
"This is an English-speaking server, so please speak English "
f"to the best of your ability - {google_translate_link} "
"should be fine if you're not sure."
),
(
"Keep all discussions safe for work - No gore, nudity, sexual "
"soliciting, references to suicide, or anything else of that nature"
),
(
"We do not allow advertisements for communities (including "
"other Discord servers) or commercial projects - Contact "
"us directly if you want to discuss a partnership!"
)
])