#dev-contrib

1 messages ยท Page 30 of 1

cursive relic
#

Doesn't look cramped on mobile either

#

(I now fixed the typos I made there...)

real stream
#

Hello!

Recently joined to this server and started to read all necessary introduction stuffs and guides. While I was reading a "Help Channels" guide, I noticed typo: instead of "quality", there is "quailty".

When I had finished to read this guide, I went to read a "Contributing" guide and all related pages:

  1. Contributing Guidelines
  2. Style Guide
  3. Issues
  4. Pull Requests
  5. Contributing to Site

Then I checked similar issues and PRs and found closed one: PR 1483. I noticed that there's no refer to an issue, but in the "Contributing" guide is telling:

The first step to any new contribution is an issue describing a problem with the current codebase or proposing a new feature. All the open issues are viewable on the GitHub repositories, for instance here is the issues page for Sir Lancebot. If you have something that you want to implement open a new issue to present your idea. Otherwise, you can browse the unassigned issues and ask to be assigned to one that you're interested in, either in the comments on the issue or in the #dev-contrib channel on Discord.

A question here is how to do correctly? Make an issue and then a PR that closing this issue or without the issue? Thanks in advance!

UPD: fixed a grammar error

timid sentinel
#

For more complex changes it's always good to open an issue first, so we can confirm it's a change we want and discuss it before you spend time implementing it.

cursive relic
last patio
#

well, Go-to beginners resources sounds wrong, I think that's supposed to be Go-to beginner resources like fix error suggested. Your suggestion is also nice though

cursive relic
#

Another typo there... Yes it was supposed to be Go-to beginner resources

thorny obsidian
#

@cursive relic left you a comment on the draft PR~

cursive relic
# thorny obsidian <@534738044004335626> left you a comment on the draft PR~

Thx for the update, it is looking really nice! Here's the older vs the one you posted on the github side-by-side

I'm wondering about the title, There's the one that fix error suggested: "Go-to beginner resources", then the "Resources to Learn Python" and I had thought for "Go-to resources for beginners". What would be the most appropriate for the embed to describe it's purpose/(content)? (or any other that's not there yet)

#

I like the new format there this

#

Other than the title (not sure what to pick there), IMO it is starting to look good

thorny obsidian
cursive relic
#

sounds good! I'll fix my repo and try to work this to open PR tomorrow ๐Ÿ˜„

cursive relic
#

bot#3479 opened!

dusky shoreBOT
last patio
#

yippee

oblique cairn
#

(Oh, that's from kat? I don't get the joke)

cursive relic
#

I'm curious about that as well, but forgot to ask about it, idk

dry turret
thorny obsidian
#

whenever a core dev merges in the new tag, I can write up and post a changelog for it

patent pivot
#

!slorb

stable mountainBOT
#
Go-to beginner resources

Here are the top free resources we recommend for people who are new to programming:

For a full, curated list of educational resources we recommend, please see our resources page!

thorny obsidian
thorny obsidian
#

@celest charm would you be opposed if I turned your one pinned message into a proper page on the pydis website? I really like how you break it up of "new to programming" vs "new to python" and I think it would be a nice place to be able to link out to in general

cursive relic
zealous knot
#

is anybody here familiar with how to set up an lsp/linting to work with the CPython source code (I'm using clangd)?

is it possible to generate a compile_commands.json with the project?

celest charm
zealous knot
#

sorry, thanks

zealous knot
whole delta
tame pebble
stable mountainBOT
#
Query "bookmark" not found.
tame pebble
#

.help bookmark

dusky shoreBOT
#
Command Help

**```
.bookmark <target_message> [title=Bookmark]

**Can also use:** `bm`, `pin`

*Send the author a link to the specified message via DMs.

Members can either give a message as an argument, or reply to a message.

Bookmarks can subsequently be deleted by using the `bookmark delete` command in DMs.*
tame pebble
#

It's the 'bookmark' command that should let you do that

#

you can reply to that message and run it

#

or use the app commands available when you long press that msg

celest charm
#

or you can copy the text and save it to a text file

wind magnet
celest charm
gritty elm
#

@patent pivot let me know whenever you get the chance to take a look at my PR again. No rush, but ping me when you do as I dont want to miss it.

patent pivot
#

I will try get to them when I can -- there are other core devs as well, I'm in an incredibly busy period with work unfortunately

loud meteor
humble leafBOT
fallen patrol
#

clicked wrong channel

spice bolt
#

hi, could i be assigned to sir-lancebot#1491 ? there has been no PR of the issue and its been essentially dormant for the past year

dusky shoreBOT
ocean sable
oblique cairn
toxic wren
#

why isn't the leveling code in the source ?

#

don't see any leveling commits on April 1 st

#

looks like it's in sir robin?

vale ibex
#

yeah, most events go in sir-robin, as that's the events bot

patent pivot
undone nimbus
last patio
toxic wren
# patent pivot april foolks

๐Ÿ˜ญ lmao saw the announcement 3 days later. Still though, some people have the role, what's that about?

spice bolt
last patio
wise marten
#

I noticed that on the paste service, shift+tab does not work, and just does the tab action of indenting instead.

rapid swallow
vale ibex
ocean sable
#

Hey everyone! ๐Ÿ‘‹ I'm planning to contribute a 2048 game cog to Sir Lancebot and wanted to give a heads up before I open an issue. If anyone would like to review it or help me out with it let me know and we can work on it together!

left wigeon
#

Hi all! Iโ€™m looking to contribute to an open-source or team project to further develop my expertise. Iโ€™m eager to learn new workflows and help solve interesting challenges.

ocean sable
#

@terse prairie Hey Chris

left wigeon
normal notch
#

hey hello hi im 14 and im good with python

formal vortex
#

Uh someone just dm me the python app and can teach me

last patio
#

Please read the channel description. This is for Python Discord internal project discussions.

ocean sable
#

your own AI or using an API key?

oblique cairn
ocean sable
oblique cairn
ocean sable
#

I don't understand what your intending

oblique cairn
ocean sable
ocean sable
#

or @oblique cairn

oblique cairn
patent pivot
#

@ocean sable after speaking with some core devs, I've put a temporary block on your GitHub account against our GitHub organisation, you've created 6 open PRs without addressing comments on previous ones for bugs that I don't know if we've ever experienced in production. This should've been raised as one issue with the reminder command that we could talk through and most likely group into one refactoring PR.

Unfortunately the way you've gone about things comes off at best spammy and at worst AI generated chaos. Please take some time to cool down, it's a temporary block. We haven't decided what to do with the 6 PRs now but we may ask you to condense all your reminder related issues into one PR.

ocean sable
ocean sable
#

Hey everyone, Im going to be working on Issues and PR's for the main bot over the next few days, DM me if you would like to help me ๐Ÿ™‚

patent pivot
#

don't just open PRs please

patent pivot
shy falcon
#

hi, could someone review my PR at sir-lancebot#1743?

fallen patrol
#

why am i not surprised that astral got bought by openAI :/
(posting here because virtually every* pydis project now uses uv/ruff/something from astral)

last patio
#

yeah, I'm not happy about that either. I feel like with the big AI companies trying hard to make a profit right now, astral's projects might soon go to shit

royal prawn
#

to be fair, anthropic bought npm competitor bun back around december, and i'm not sure it's fared worse for it

patent pivot
#

when are we doing the hatch migration gng

last patio
#

guix migration

patent pivot
#

๐Ÿ‘Ž

vale ibex
#

pip-compile migration

#

back to basics

last patio
#

apt install python-discord-py

cold island
#

I think it's pretty shameful that we tell people we write our own bots from scratch, but then use a third-party dependency manager

vale ibex
#

please hide this message from volcyy before he opens a 130k line PR that implements everything from stdlib

patent pivot
#

@toxic wren any core dev can assign issues, not just me as an fyi

@ocean sable we said we'd figure what to do with the open PRs before proceeding and that includes claiming new issues. I think we've settled on a solution: please can you take all the changes you've made to reminders from the 4 PRs and combine into 1 PR so that it can be reviewed, tested and merged as one unit of work. I'll close the 4 PRs now that we want turning into 1 PR.

#

also as mentioned there are some issues with the existing PRs incorporating other unrelated changes which need resolving

#

there are also outstanding review comments on the reminder PRs from myself (on #3500)

toxic wren
patent pivot
#

the point is that you don't have to single out a specific core dev to ask those things to โ€” dropping a message here is the preferred way of doing things (same reason we ask people to DM modmail instead of individual moderators)

#

it's no problem โ€” just making sure it's known

ocean sable
patent pivot
#

As mentioned you have had some feedback given on all your PRs now that you need to implement and push to them

austere hornet
#

(What happened to Lance sending links to GitHub pages?)

patent pivot
#

sir-lancebot#1690

#

that seems odd

#

bot#123

#

python-discord/bot#123

#

huh

#

OH

#

lol

#

sir-lancebot#1690 sir-lancebot#1694

patent pivot
#

bot didn't have perms since we introduced aspiring contributor

ocean sable
#

Hey, I'm looking to add my wordle to the Sir-LanceBot what would be the best approach to doing this?

#

Should I make an issue, PR on the Github or talk about it in here first? Just trying to make sure I do it right this time ๐Ÿ˜› Hope someone can help me out!

patent pivot
#

Again, I think we need to see through your reminder changes before it's reasonable to put even more PRs into the pipeline

ocean sable
patent pivot
ocean sable
patent pivot
patent pivot
#

ooops did not realise components ping lol

#

sorry to everyone in #dev-info who got a mention

fallen patrol
#

tldr don't use embeds for new things if you can help it

#

damnit joe

vale ibex
#

That's about half as long as he's been alive!

patent pivot
#

I don't think that has any relation

#

mentioned in embeds don't ping users, mentions in components do

last patio
#

good morning team

#

are you ready to destroy all those who have wronged you in 2025 today

fallen patrol
tame pebble
#

@modirataurs

#

M-x send volcyy some chicken

last patio
#

no man I mean destroying all the bugs in our infrastructureo f course

frail tangle
#

Hi guys

hardy gorge
#

Welcome to #dev-contrib
This channel is specifically meant to discuss contributing to our projects. If you're interested in that, please check out our projects on GitHub (https://github.com/python-discord/) and take note of the README and CONTRIBUTING documents in the root directory of most of our repositories. Our website also has a special section for contributing that contains guides that will help you set-up a development environment for some of our repositories. You can find it here: https://pythondiscord.com/pages/contributing/.

cloud yacht
#

This looks great!

magic arch
molten bough
#

Oh hey, this is an open channel now

#

Interesting

crude gyro
#

that's right, @magic arch

#

we've had this channel for well over a year, actually, but it's been restricted to <@&295488872404484098>

#

so we've simply opened the channel up.

#

helps us be more transparant, and makes it easier to get into contributing to pydis.

magic arch
#

Ah, makes sense

brazen charm
#

yay

crude gyro
#

I believe someone suggested it in #community-meta recently, and we discussed it in the staff meeting yesterday and decided it was a good idea

#

I forget whose suggestion it was, though

#

but whoever you are, thanks for that swaglemon ๐Ÿ‘

molten bough
#

Wasn't me, but I think it's a good idea too :>

glass pecan
#

it was Numerlor

crude gyro
#

nice. thanks @brazen charm!

tawdry vapor
#

It'd be nice to have custom icons for superstarify modlogs

#

right now it just user the user update icon

#

There's currently not even a mod log for unsuperstarify

#

Was trying to think of an icon for that (and a colour, for that matter) and figured a custom icon would be good

#

Maybe they could both be gold, something like ๐ŸŒŸ or ๐ŸŒ 

#

or different colours to distinguish them, but which colours?

tawdry vapor
#

Turns out there are icons, just not being used and based on the old name

tawdry vapor
green oriole
#

No more super secret channel then? ๐Ÿ˜„

crude gyro
#

@tawdry vapor I agree. I did make that hiphopified icon, I wasn't aware we weren't using it

#

but the idea of using a star might be more appropriate given its new name

#

I still have the psd somewhere that we used for the original icons, might be able to whip up a star icon very easily with the same dimensions and colors.

#

tbh we should have all those icons up on the branding repo

#

and the psd too

#

if you make a branding issue and assign it to me I can probably take care of that tonight or something

#

both the new icon and committing the old ones

molten bough
#

Some of those icons used font-awesome icons, right?

crude gyro
#

all of them did

green oriole
crude gyro
#

okay, I'll assign it.

green oriole
#

Thanks

crude gyro
#

yeah that looks reasonable.

#

good job

crude gyro
#

@hazy plover hi.

#

please direct python.sureis.sexy at our new servers. I'll DM you the IP.

hazy plover
#

done and doners.

molten bough
#

Haha, I forgot about that

#

If both domains are on cloudflare though, you should be able to CNAME it? Even with CF's proxy

green oriole
#

Even if they aren't both on cloudflare you can use a CNAME record afaik

molten bough
#

Yeah but you can't do that if they use the CF proxy

#

Since you'll hit the proxy and it won't know what to do

green oriole
#

They really block CNAMEs?

#

What's the point?

#

Anyway

#

Snekbox is broken

glass pecan
#

no, the site is just down for a bit

molten bough
#

They don't block it, they just don't know what to do with it

molten bough
#

I wonder if font-awesome is injecting something.

#

oh no, duh, it's the youtube video

glass pecan
#

lol

molten bough
#

If I'm making a form, it goes in forms/ under the app, right?

glass pecan
#

not sure with django, sorry

molten bough
#

It's a project convention

glass pecan
#

yeah still not sure since i think lemon and volcyy are the main ones who decided any project structure stuff

molten bough
#

Aha, okay

#

Well, I can always move it later

glass pecan
#

and i haven't personally looked at those things

#

only recently have i worked on site itself

molten bough
#

Gotcha

glass pecan
#

so its all a new learning experience to me really

#

like, i can review html and css stuff easily

#

but project stuff i'd have to learn lol

#

hmmm snekbox isn't connecting

molten bough
#

I'm still learning new stuff about Python in general tbh

#

discovered this yesterday with suppress(SocialAccount.DoesNotExist, DiscordUser.DoesNotExist):

#

er, two days ago

glass pecan
#

yeah

#

seen that in your diff

molten bough
#

aww, you're reading my diffs

#

:>

glass pecan
#

i think you shared it with me to see possible solutions when we were talking about something

molten bough
#

man, I probably did, my brain is shot today

glass pecan
#

haha

#

at any rate, i'm a bit head scratchy

molten bough
#

Haha, okay, fair

glass pecan
#

!eval return 1

stable mountainBOT
#

Sorry, an unexpected error occurred. Please let us know!

ClientConnectorError: Cannot connect to host snekbox.pythondiscord.com:443 ssl:None [Connect call failed ('172.104.139.207', 443)]

glass pecan
#

failing to connect

molten bough
#

still down I guess

glass pecan
#

site is up though

#

docker is up

#

should be pointing to the right place pithink

molten bough
#

Did you move it to another server?

glass pecan
#

nope

molten bough
glass pecan
#

only thing i did was disable the ssl on the server

molten bough
#

They're not the same IP

#

I guess the latter is cloudflare

glass pecan
#

i'll check the dns i guess

molten bough
#

yeah, that one is cloudflare

glass pecan
#

yep

#

its not proxied

molten bough
#

snekbox probably shouldn't be proxied, yeah

glass pecan
#

i suspect the cloudflare ssl will fail without it

#

which is causing the above

#

!eval return 1

stable mountainBOT
#

Sorry, an unexpected error occurred. Please let us know!

ClientConnectorError: Cannot connect to host snekbox.pythondiscord.com:443 ssl:None [Connect call failed ('172.104.139.207', 443)]

glass pecan
#

said ssl None

#

so it's connecting direct to the server

#

and it's seeing no valid cert

#

which is true, we removed it

#

lol

molten bough
#

443 is refusing connections

glass pecan
#

shouldn't be, it's open

molten bough
glass pecan
#

hmmm

#

wonder what caused that

molten bough
#

You're not like, using iptables to filter out connections from non-cloudflare addresses?

glass pecan
#

we have plain allow rules for both 443 and 80

#

we haven't added disallows based on ips

molten bough
#

Port 80 is open

#

firefox just gives me a 404

#

at any rate, something is listening there

glass pecan
#

!eval print(1)

stable mountainBOT
#

@glass pecan Your eval job has completed with return code 0.

1
molten bough
#

\o/

glass pecan
#

i went the lazy route

#

i just proxied it

molten bough
#

it seems like your problem must be on 443 then, yeah

glass pecan
#

mm

molten bough
#

ideally you would have SSL between the server and Cloudflare too

glass pecan
#

we do

#

wait

#

no i don't

#

hmm yeah that's gotta be fixed

molten bough
#

might be worth examining a sudo iptables -L

glass pecan
#

ok i think i see the issue

#

i suspect we need at the least a self signed cert to encrypt from server to cf

molten bough
#

yes, you do

glass pecan
#

we removed our server certs lol

molten bough
#

well yep that'd break it

glass pecan
#

however

molten bough
#

you should have a valid cert on the server too

#

not self-signed

glass pecan
#

i don't like self signeds

#

and i don't think we need lets encrypt

molten bough
#

you can either cron letsencrypt, but a better option is to use the acme module that salt has, since iirc you're using salt

glass pecan
#

what i could do is just use the cf origin ca cert we're allowed to use

#

it doesn't require renewing

molten bough
#

I mean the whole point of doing this is to protect the traffic between your server and CF

#

using a publically available cert isn't going to do that

glass pecan
#

its not a public cert

#

you create one

molten bough
#

hm, okay

#

ah, yeah, okay, I see

#

it's only trusted by CF

glass pecan
#

which is fine, we're going through cf for all the things now

molten bough
#

although if you ever needed to turn off the proxy, you'd be doing all this again

glass pecan
#

that's fine, i don't think we'd have a reason to turn it off afaik

molten bough
#

was it salt you were using, by the way? Or ansible?

glass pecan
#

salt

glass pecan
#

for a self-signed?

molten bough
#

for letsencrypt

glass pecan
#

oh we already had lets encrypt all setup

molten bough
#

why would you remove it in the first place, then?

glass pecan
#

i figured it wasn't required with cf, but since there is, i can quite literally just revert it and it would all be back how it is

#

however

molten bough
#

I mean, I'd say LE is the best option for covering all your bases

#

that's what I do at least

glass pecan
#

probs i see no issue putting it back, it's a shame it didn't work out how i wanted it

#

lol

crude gyro
#

I don't see why we need to do that

#

the cf thing clearly works without a single cert on our server. just not for snekbox. so why not?

glass pecan
#

it works for snekbox

molten bough
#

It works if the traffic is unencrypted, lemon

glass pecan
#

atm we're like this

#

so between cf and users, it's all https

#

but between cf and alpha, it's plain

crude gyro
#

yes.

glass pecan
#

to do this, we'd need a cert on the server

molten bough
#

back when I first set up Glowstone, the community was actually asking how we had CF set up

crude gyro
#

why do we need to do that?

molten bough
#

they were pretty rattled when I said there wasn't SSL at the origin

#

but it was like 3 minutes to set up, so

#

since we're handling auth tokens from Discord we probably do want that security

glass pecan
#

it's not entirely required to do full end to end encryption, but it's not a bad thing to have for completeness

crude gyro
#

can you guys explain exactly what the point is?

molten bough
#

I think GDPR also mandates some form of encryption for the whole pipe, but I'm not 100% on that

#

I can tl;dr it if you like

crude gyro
#

so far all I'm hearing are these handwavy arguments.

molten bough
#

the current setup as scragly has it means that traffic between the user and CF is encrypted - users are safe at coffee shops

#

traffic between CF and the webapp itself is not, so it's fairly simple to spy on that side

#

a bad actor sitting in the middle or somewhere along the way would be able to intercept that communication and grab stuff like oauth tokens from users

#

remember, "nobody is interested in that" and "it'll never happen to me" are the first step to a breach :>

crude gyro
#

yeah cause that's what I was gonna say.

#

okay so it's exposed to interception between cf and linode.

glass pecan
#

yes

#

which is a lot less likely the the other side of things, but it's still a thing

crude gyro
#

fair enough. guess we should secure that traffic too then.

molten bough
#

it's probably worth noting that linode is a US company, and I wouldn't trust the US not to do interception

glass pecan
#

my point though is i don't see why i shouldn't just use the cf origin cert

molten bough
#

You could do that

#

The only drawback really is if you ever need to turn off the proxy for any reason, it won't work

#

same if you need to access the webapp directly

glass pecan
#

i would have no idea why we'd need to disable the proxy

crude gyro
#

can you explain what that even means

molten bough
#

I think a better question is why change it in the first place

glass pecan
#

because it's less to deal with on-server

crude gyro
#

no. we had good reasons to change it.

#

let's focus on the now please.

molten bough
#

OK, well to explain that

#

CF does allow you to generate a security certificate that never needs to be renewed

#

you can use it to secure the traffic between CF and the origin, but it is untrusted by everyone but CF

#

so anything trying to access it directly - either by IP address or if the proxy was disabled - will reject it

#

of course that won't stop docker containers interacting locally though, since you can just use the local port

#

if you never plan on disabling the proxy then it might be okay, I think I would still prefer LE to be safe, and the CF cert does make debugging the port harder if you ever need to do that

#

it's up to your own use-cases really

glass pecan
#

yeah will have to think about it

molten bough
#

RE allowing users to remove django accounts, I'm thinking of doing a GH style "type your username into the box to confirm"

#

that sound like a good idea?

crude gyro
#

sure that sounds good to me.

#

discord does it too

#

so it should be familiar.

molten bough
#

Alright, sounds good

molten bough
glass pecan
#

nice

molten bough
#

How much prose do you think there should be on the removal page?

#

I wrote like a couple paragraphs about what is and isn't removed, but I dunno

glass pecan
#

that's a lot of text

molten bough
#

yeah, it is

brazen charm
#

that must be one of the longest delete messages that aren't about retaining users I have seen ๐Ÿ˜„

molten bough
#

yeeeah

#

I'm not sure what to put here tbh

green oriole
#

Just say that this action is irreversable and it will not delete things like infractions?

glass pecan
#

he is saying that

#

lol

molten bough
#

haha

green oriole
#

I mean delete the rest ๐Ÿ˜„

brazen charm
#

The permanent notice could be without the recreation info, and just say it is irreversible

molten bough
#

:>

#

10/10 ship it

#

nah, I think I agree that it should be a lot shorter

glass pecan
#

looks ok to me

molten bough
brazen charm
#

Could the for reference nick just be the default background text in the input line?

glass pecan
#

is it only infraction records we keep?

molten bough
#

No

glass pecan
#

ah then that wording is all g to me

molten bough
#

Basically this is entirely separate from anything the bot collects

#

actually we have a privacy page, I could just link that

green oriole
#

Nothing about the fact that the data can't be recovered?

molten bough
#

to be honest, right now there's almost no data to recover

#

but sure, I can add a sentence

#

by the way, I think the privacy page might be out of date

#

does not have any form of monetary income whatsoever

#

not relevant to privacy, but :>

crude gyro
#

can we agree that it's irreversible, not unreversible

glass pecan
#

yes

molten bough
#

yes

green oriole
#

Probably

crude gyro
#

also I don't care for the prose, I'd prefer if it was short and sweet. how does it look on github or discord when you delete stuff?

#

isn't it just a oneliner?

molten bough
#

I expect they have a privacy page linked to at signup

crude gyro
#

okay, and we also have a privacy page.

molten bough
#

Yep, so I can link to that

woeful thorn
crude gyro
#

if we want to write at length about the privacy implications of deleting a user, I think we should just do that on the privacy page.

molten bough
#

Yeah, that's a good point

crude gyro
#

and I don't think we need to link it on the delete page, either. again, nobody does that.

#

only users who are a member of this community can create an account on the site, and they've accepted the privacy policy already.

molten bough
#

that's not true, but I've been planning on making that the case

crude gyro
#

I thought you already did but okay anyway that's the intended design.

#

ideally only users who are Developers.

molten bough
#

It's on my list ablobsalute

crude gyro
#

cool cool.

#

well then, something closer to the github one would be fine by me.

molten bough
#

Alright

#

I can make use of models basically anywhere, by the way, right?

crude gyro
#

sure. why not?

molten bough
#

No reason in particular, some web frameworks don't allow that

crude gyro
#

are you asking if we want to keep model access within the parent app?

molten bough
#

No, no

#

I'm just thinking I'll do it in the account adapter

crude gyro
#

should be fine.

molten bough
#

Alright

#

that's like a 3-liner

#

should be fine

#

username, not account username

#

do we care about stopping people from just copying the username?

#

I assume not

glass pecan
#

no

#

nobody else does

#

ik, because i copy it everytime personally

molten bough
#

yeah, I figured it wasn't really useful

glass pecan
#

lol

molten bough
#

haha

#

you can prevent text selection but it's a bit inconsistent between browsers

#

it's just discouragement really

crude gyro
#

the your

molten bough
#

Oh, good spot

brazen charm
#

A newline after the nick to keep it a bit more tidy?

molten bough
#

I dunno, I think this looks okay

brazen charm
#

Just a thought, definetly better than the wall of text before

molten bough
green oriole
#

to confirm that you'd like to have your account removed - > to confirm that you'd like to delete your account?

#

Keep things simple?

molten bough
#

I think mine is more correct, but I don't mind changing it to simplify

#

wonder if I can make a horizontal form with crispy-bulma

green oriole
#

Oh and can you try to center the text inside the confirmation button?

molten bough
#

do you mean, center the button?

brazen charm
#

isn't it?

green oriole
#

Oh yeah

molten bough
#

it is

crude gyro
#

looks centered to me.

green oriole
#

Don't listen what I'm saying

#

In my mind the button had the same length than the text

molten bough
#

it's not bad, though

brazen charm
#

don't think the button fits in the center when it's alone

hardy gorge
#

I don't like it centered like that

#

but I'm just me

molten bough
#

yeah, I think I prefer it left as well

glass pecan
#

i don't like it centred as the input is left aligned

brazen charm
#

it feels out of place because there isn't much else on the page and you're missing it when going from left off of the input

hardy gorge
#

What do you mean by horizontal, @molten bough?

#

The button at the right side?

molten bough
#

With the label to the left of the input

hardy gorge
#

oh, you can do that

#

with bulma

molten bough
#

did we add that to crispy-bulma yet though?

#

I don't think so

hardy gorge
#

oh, that I don't know

crude gyro
#

You have requested to delete the account with username lemon#0001.

Please note that this cannot be undone.

To verify that you'd like to remove your account, please type your username in the box below.

hardy gorge
#

hardcode the username as well!

molten bough
#

haha

#

I like that too

glass pecan
#

lemon#0001

#

did it delete

crude gyro
#

please don't delete me.

glass pecan
#

damn

hardy gorge
#

just your account

glass pecan
#

add an easter egg

#

if you use lemon#0001 instead of your own name, you get redirected to a webpage of nothing but lemons face

molten bough
#

haha

#

maybe later

#

any opinions on the text colour by the way? I made it black because the red is hard to read in a <code> but I'm no longer using that

glass pecan
#

seems fine

crude gyro
#

sokay with me.

molten bough
glass pecan
molten bough
#

:>

glass pecan
#

the space seems weird

crude gyro
#

seems k, only thing I'm not sure about is the giant input field

molten bough
#

It can be less giant, it's just a centred column

mellow hare
#

Like.... maybe about 2/5ths that size

crude gyro
#

yeah. but I don't know if it would look better smaller either. though it might.

mellow hare
#

1/3rd or 2/5ths

#

That's my guess

molten bough
#

it was at half, this is one-third

#

it'll be full-width on mobile though

mellow hare
#

Can you keep it left aligned on the center column?

molten bough
#

Not sure what you mean by that

#

You mean left-align it to the message box above?

mellow hare
#

Like... the left margin of that box and all that is on th- yeah

#

That

molten bough
#

hmm

#

I don't think so

#

maybe I could add a right margin to the column

#

or right padding, rather

#

it'd break on mobile though

mellow hare
#

I mean if it might comprom- yeah if that's the case then keeping it how it was might be a better option

crude gyro
#

keep it how it was.

molten bough
#

Alright

mellow hare
#

Is that the modified or the previous

molten bough
#

they'd be the same

mellow hare
#

Gotcha

glass pecan
#

wow those logos at the bottom seem crappy in that screenshot

crude gyro
#

bold the cannot?

mellow hare
#

^

molten bough
mellow hare
#

All caps as well maybe?

glass pecan
#

I understand, delete my account
DO IT, JUST DO IT!

mellow hare
#

Still doesn't quite stand out enough

glass pecan
#

nah don't caps it

crude gyro
#

no all caps please

molten bough
glass pecan
#

wat

crude gyro
#

it stands out fine.

#

hahah

glass pecan
#

hahaha

mellow hare
#

Oh god yeah, I see what you mean about the django and the Bluma logos, Scrags

#

Love it

molten bough
#

:>

mellow hare
#

The aliasing on those logos is really bizarre

molten bough
#

it is pretty weird

glass pecan
#

yeah

molten bough
#

this is firefox, linux

#

69.0.3

mellow hare
#

Is it different with Chrome?

glass pecan
#

no repro on chrome

mellow hare
#

Hmm

#

God I wish there was more of a standard...

molten bough
mellow hare
#

That's the biggest headache with web dev stuff

green oriole
molten bough
#

insert xkcd here

glass pecan
#

i can't repro on ff either

mellow hare
#

Way better than it was

glass pecan
#

so its just me

mellow hare
#

That's an odd quirk, though

glass pecan
#

that django in yours akarys is acceptable

mellow hare
#

Yeah that at least has some anti-aliasing going on

glass pecan
#

yeah

#

but the Python Discord there isn't rendering the font properly

#

at least not smoothing

#

weird

molten bough
#

it does alias better in chrome

mellow hare
#

Does FF not do any anti-aliasing?

molten bough
glass pecan
#

for reference, this is what i see

hardy gorge
mellow hare
#

Well now they look normal...

glass pecan
molten bough
#

the bulma looks better in FF for me, django better in chrome

glass pecan
#

so it might be a system thing?

mellow hare
#

Possibly

molten bough
#

most likely tbh

mellow hare
#

But even comparing the one on top of the other that g showed us it seems fine now

glass pecan
#

i could ... change them to svgs

mellow hare
#

It's the way of the future

glass pecan
#

just force client side rendering lol

#

no pngs for you!

#

anyways

molten bough
#

aliasing seems to be turned on in FF here

glass pecan
#

wasn't meant to derail there

molten bough
#

it's webgl though

#

that's all I can see

#

anyway, yeah

#

are we happy with this?

green oriole
#

The letters in gdude#2002 look larger than the rest

molten bough
#

they're both bold and monospace

crude gyro
#

maybe we bold all three words. cannot be undone.

#

bet Hemlock would like that.

molten bough
#

haha

mellow hare
#

You're not wrong

crude gyro
#

looks good to me.

mellow hare
#

Yeah, that stands out a lot better

molten bough
#

unit testing this will be an experience

#

haha

crude gyro
#

account deletion is a massive h1 looking thing.

molten bough
#

yep, it's an h1

crude gyro
#

maybe h2.

mellow hare
#

This a technical term thing?

molten bough
crude gyro
#

html header size.

molten bough
#

header levels, they're actual html tags

mellow hare
#

Oh ner

#

Thought we were still on the testing thing

molten bough
#

oh right

#

nah I'll figure that out

mellow hare
#

Yeah okay, I'm with you guys now

hardy gorge
#

in bulma, they're based off of the class, though.

molten bough
#

yeah, is-size-2

hardy gorge
#

You can have a h1 with size 6

#

yeah

molten bough
#

the actual header level matters for stuff like screen readers

#

but only that they're nested appropriately

#

OK, no news is good news, I'll get that committed

glass pecan
#

nice nice

molten bough
#

well, after I lint

glass pecan
#

yes, linting is life

molten bough
#

stares at Akarys

glass pecan
#

just look at the channel topic

#

lol

molten bough
#

haha, yeah

#

I'm still sad that pycharm doesn't sort imports as it generates them

#

ctrl+alt+o to the rescue

crude gyro
#

yeah that does suck.

glass pecan
#

just be magic enough to not need it

molten bough
#

you can have it do it at commit time at least

#

there's a checkbox in the commit window

glass pecan
#

orly

#

nice

mellow hare
#

I LOVE whoever set up that precommit part in the pipenv

#

That makes it so much easier

glass pecan
#

it was the other dude

molten bough
#

pre-commit is awesome

#

although the pydis setup is weird

#

it makes sense to do it that way though

glass pecan
#

i don't see how it's weird

crude gyro
#

I think Mark did a bunch of work on that

#

ftr

glass pecan
#

mark is a machine

crude gyro
#

maybe ELA too

mellow hare
#

We have a lot of machines

glass pecan
#

hemachine

mellow hare
#

I'm like one of those

#

Like

molten bough
#

I mean it's weird because usually you just let pre-commit manage the environment

mellow hare
#

Battery powered hand fans

molten bough
#

but this is better, really

hardy gorge
#

Yes, this basically ensures that our precommit and pipenv setups don't get out of sync

#

because that caused issues in the past

molten bough
#

Yeah, I don't doubt it

crude gyro
#

so many environments in play

molten bough
#

PyDis needs its own green party at this point

#

:>

hardy gorge
#

Hmm coverage fail

molten bough
#

yeah, that's fine

#

I knew that'd happen

hardy gorge
#

You can do a local coverage test by using pipenv run coverage run manage.py followed by pipenv run coverage report -m if you like

molten bough
#

I can't

hardy gorge
#

o hwait

crude gyro
#

the only thing you tested was our patience.

hardy gorge
#

you need to set-up the .env file for that

molten bough
#

for whatever reason, not all your tests pass in my environment

hardy gorge
#

so it points to the docker database

molten bough
#

but I can run individual units just fine

hardy gorge
#

hmm

molten bough
#

oh wait, that was like a month ago

#

I forgot that was already fixed

#

anyway pycharm does coverage

crude gyro
#

thought you fixed that yeah.

glass pecan
#

you can get it working with CI=azure

#

๐Ÿ˜„

molten bough
#

I have it set up with the same env vars I use to run it

#

:>

mellow hare
#

I had a weird thing yesterday: I had to uninstall and reinstall all of my Python versions. I kept getting weird errors when trying to mess with stuff in PyCharm

#

Works now, just so weird

molten bough
#

That is pretty odd

#

I'm waiting for python 3.8 to come around and for manjaro to suddenly update python

#

and then I'll have to redo all my environments

#

hnng

#

By the way, what data should we expose to the user on their account?

#

lemon mentioned roles before, should we be showing infractions or anything?

mellow hare
#

Roles, Date Joined..... There really isn't much we store that would be interesting

glass pecan
#

are you sure it was roles and not group

molten bough
#

I dunno, roles is what I wrote in the ticket

hardy gorge
#

I don't think there's any use in hidden infractions showing up in the count since they're not really infractions

glass pecan
#

we don't want to make a whole profile thing, the only thing that's handy is showing the currently active django group for debugging

crude gyro
#

group is definitely what I meant.

molten bough
#

okay, group then

crude gyro
#

other minor things may be interesting but nothing as major as infractions.

molten bough
#

Alright

#

maybe have a uh

#

..

#

the fuck is it called

#

accordion?

#

with the debug info

crude gyro
#

I was just thinking like.. if you could think of other data similar to group that might be useful for debugging, essentially.

molten bough
#

Alright

crude gyro
#

but I can't.

glass pecan
#

no need to hide it away in an accordian though

crude gyro
#

not if it's just one or two pieces of data, certainly.

glass pecan
#

i don't know what the user settings page would show currently

molten bough
#

the focus of the page is just connections and account removal

#

I haven't written it yet

glass pecan
#

ok, so service connections is a section, name and group, delete account

crude gyro
#

connections, account removal, what group am I in, (whatever other account specific info is relevant)

glass pecan
#

yeah

crude gyro
#

if any

molten bough
#

I can't think of much

crude gyro
#

nothing discordy.

molten bough
#

api tokens?

#

neh.

glass pecan
#

nah

crude gyro
#

well then there you go.

#

if any == false

#

proceed

glass pecan
#

lol

molten bough
#

haha

#

okay

#

I'll do the require-user-on-the-server-and-verified first

#

which reminds me

#

how should I store that?

#

like, the role to use for the check

crude gyro
#

role to use for the check? I'm confused.

#

the user and the roles are all in the database already

molten bough
#

Well, we don't want people signing up unless they have the Developer role

#

but I need to pull the correct role somehow

#

flag on the role, maybe?

crude gyro
#

it's all in the db

molten bough
#

Well yeah, but if the name or the ID of the role changes..

#

we can't really hardcode the ID anyway, since people need to run this thing for testing

hardy gorge
#

You can also check against the position of their top role, I think

#

everyone is the lowest, anything higher than that should mean they have the developers role as well

molten bough
#

muted?

hardy gorge
#

muted is way higher

molten bough
#

announcements?

#

I dunno if you still keep that one but we kept it on rejoins on the old site

crude gyro
#

can't get announcements without having accepted the rules.

hardy gorge
#

we sync all the roles we have, but we don't necessarily reassign them on rejoin

molten bough
#

so they just need to have more than @everyone

crude gyro
#

I like ves's idea. if they have any role other than everyone we're good.

molten bough
#

len(roles) > 1

crude gyro
#

yes

molten bough
#

works for me

crude gyro
#

do we sync everyone?

green oriole
#

(sorry for interrupting but is there a way to disable the rest api token security so I can test if my new model work using simple request?)

molten bough
#

yep

hardy gorge
#

Hmm, that would mean that someone rejoining would pass without making it past checkpoint

#

Since they will get the muted role back

molten bough
#

that's my concern, yeah

hardy gorge
#

yeah

crude gyro
#

doesn't matter. they already accepted.

#

the first time.

molten bough
#

additionally, another thought crossed my mind

glass pecan
#

@green oriole no idea what you mean akarys, but there's never a valid reason to remove the token pithink

molten bough
#

if we ever want to give users their infractions, if they're banned they won't be on the server

glass pecan
#

even in testing you can authenticate

molten bough
#

the system already doesn't assign them any groups if they aren't here

crude gyro
#

still not clear on what you're asking

molten bough
#

well, if you ever want to do stuff like infraction listing or ban appeals, if we prevent them from logging in when they're not on the server then they won't be able to do that

crude gyro
#

oh right, that's what you're saying.

molten bough
#

yeah

#

I did think ahead a bit and they already have no perms if they're not on the server

crude gyro
#

why are we preventing them from logging in? I was talking about preventing them from creating an account

molten bough
#

ah

#

aha

#

okay

#

although, if they have infractions and they never logged in on the site..

hardy gorge
#

@green oriole I'm not sure why you'd need it, but you can delete API tokens in the admin site where you created the token.

molten bough
#

well there won't be an account

#

I guess I could just check if they've ever been on the server at any point

crude gyro
#

then that's too bad. we don't want people signing up on the site who aren't in the community for privacy reasons. I want to be able to say "the privacy policy that applies to your site account was accepted when you typed !accept"

molten bough
#

like, check the presence and roles but not in_guild

mellow hare
#

Both?

#

Or no wait

molten bough
#

by presence I mean their Discord API user is in the db

mellow hare
#

Gooooootcha

#

Oh right, because we store the roles they had previously, right?

molten bough
#

Right

mellow hare
#

Do we automatically reapply them?

#

Or only just Mutes

molten bough
#

I'm not sure

crude gyro
#

just mutes and maybe announcements

#

not sure.

#

you lose admin if you leave, buddy

#

so don't even think about it.

molten bough
#

haha

mellow hare
#

No point in testing it, got it

molten bough
#

I have no idea what cog has that reassignment by the way

#

haha

crude gyro
#

verification maybe

#

not sure either.

molten bough
#

nope

#

well, anyway

glass pecan
#

whats this

molten bough
#

what do you think of that? prevent signup if the user's never joined the server, or if they only have @everyone?

mellow hare
#

I'd be verification or moderation

glass pecan
#

are you asking me or someone else

crude gyro
#

asking us all, scrugs

glass pecan
#

seems fine to me

crude gyro
#

seems reasonable to me. a user meeting those criteria will always have accepted the privacy policy

#

which works for me.

molten bough
#

Do we still have a URL that redirects to the Discord invite?

#

actually that doesn't matter, vanity invite

#

just to link it in the message

glass pecan
#

that's reassignment

#

for mute

hardy gorge
#

Is there a race condition there?

#

Since the on_member_join event of the syncer will sync roles on join, I think

#

So, it may remove the muted role from the db before it's reapplied

#

not sure, haven't checked, just a thought

glass pecan
#

don't think so, as i originally thought mute was excluded

austere veldt
#

Hi I am trying to run tests for python-discord/bot repo using pipenv run tests and I am getting this Error: the command tests could not be found within PATH or Pipfile's [scripts].

molten bough
#

it's pipenv run test, I think

glass pecan
#

yep it's test

#

you can see it in the Pipfile for reference

hardy gorge
#

I can add an alias for tests

austere veldt
#

pipenv run test gives no output on screen

hardy gorge
#

That's odd

#

Uhm

glass pecan
#

did you install with --dev

hardy gorge
#

did you install the pipenv ?

#

pipenv sync --dev should do it, since there's already a lock file

austere veldt
#
[atul] (09:06 PM ) bot $ pipenv sync --dev
Installing dependencies from Pipfile.lock (adde42)โ€ฆ
  ๐Ÿ   โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰ 86/86 โ€” 00:00:18
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
All dependencies are now up-to-date!
#

even after this pipenv run test gives no output on screen

molten bough
#

I guess we don't really need the link

#

I'm not sure I'm happy to | safe messages

#

perhaps these messages should have a max-width as well

#

verified working, anyway

crude gyro
#

yeah that last one looks good in the hood

molten bough
mellow hare
#

That looks so weird with the hand

#

It's like some sort of biological experiment

#

If it had the outline it'd be less creepy

molten bough
#

haha

#

Stick a fork in it, it's done

#

next up, connecting GH

green oriole
molten bough
#

Not able to test, still?

green oriole
#

I tested it with manual request and it worked fine

molten bough
#

Aha, well that's good

green oriole
#

I just want to make sure I didn't do any stupid things ๐Ÿ˜„

molten bough
#

Nothing jumps out, but there'll be a review later :>

#

when your PR is ready I mean

green oriole
#

Okay cool

#

I can't access Azure

glass pecan
#

why do you need to?

hardy gorge
#

You can access Azure, just not using the link Azure itself gives you in the embed

#

it's a pain

#

The link in the README on github is publically available

green oriole
#

There has been a failed build just after I pushed (I just realized that it was probably gdude's build)

molten bough
#

it was, yes

#

You don't have a PR open yet so yours won't build

green oriole
#

Yeah

#

I won't get any error because I don't have any test for my model?

hardy gorge
#

you will

#

We have a coverage requirement

green oriole
#

Oh okay

#

Oh yeah 100% I just noticed

#

Let's do some more reverse engineering then ๐Ÿ˜„

molten bough
#

OK, so I guess there must be a specific way to test a view that requires a login

#

let's see what the google says

hardy gorge
#

you should be able to use that to test in a "forced logged in" state

molten bough
#

hmm, okay

hardy gorge
#

there's also a regular login to test the login process itself

#

the difference is that, for the former, you don't care about the log-in process

molten bough
#

I will need to have a specific set of objects to test account deletion logic

#

but that's fine

#

hm, I wonder what the correct way to test the url of a redirect is

#

a reverse() gives you //pythondiscord.com/url

#

rather than the /url in the httpredirectresponse

austere veldt
#

are these tests removed now test_in_channel_check_for_correct_channel?

mellow hare
#

Do we have a more up to date config file for bot testing?

hardy gorge
#

@austere veldt Not sure, I'll check. They shouldn't have, probably, but it may be they got stuck in limbo during the migration.

molten bough
#

How did we agree to document arguments in docstrings again? Markdown list? Google style? (Image is Google style)

austere veldt
#

The structure of test repo got changed and in the file test_checks I don't see any test for in_channel_check. I have a PR around that, should I add the test?

tawdry vapor
#

@mellow hare There's probably been a few things that have been added. I can share mine if needed. You could also run a diff with yours against the default config to see what is missing

hardy gorge
#
def test_in_channel_check_for_correct_channel(context):
    context.channel.id = 42
    assert checks.in_channel_check(context, context.channel.id)


def test_in_channel_check_for_incorrect_channel(context):
    context.channel.id = 42
    assert not checks.in_channel_check(context, context.channel.id + 10)
#

that's the old version

#

okay

mellow hare
#

Yeah I ended up doing the diff thing

#

Just gotta update it here in a bit

#

Just wanted to get through this PR

hardy gorge
#

It should be reasonably up to date

molten bough
#

guess I'll stick with Markdown list for now

tawdry vapor
#

@molten bough Markdown for viewsets and the rest is not really following any popular style. Perhaps it's closer to how the standard library is documented if anything - using sentences/paragraphs to describe arguments. But you could still create a list if needed just using bullet points.

molten bough
#

hmm, okay

austere veldt
#

@hardy gorge Should I add the test back?

#

These are the tests I want to add

def test_in_channel_check_for_correct_channel(context):
    context.channel.id = [42]
    assert checks.in_channel_check(context, *context.channel.id)


def test_in_channel_check_for_incorrect_channel(context):
    context.channel.id = [42 + 10]
    assert not checks.in_channel_check(context, *context.channel.id)
tawdry vapor
#

If that's not a good explanation you can try looking at existing doctsrings for some ideas.

hardy gorge
#

@austere veldt We've migrated to unittest with the unittest specific assert methods, like self.assertFalse and self.assertTrue

#

But, sure, go ahead

austere veldt
#

Okay I can do that change and add my tests

green oriole
#

Hmm apparently the tests try to do a request to staff.pythondiscord.com which doesn't work because it should request staff.pythondiscord.local

molten bough
#

Do the tests not load the same config?

green oriole
#

I dunno

#

Let me check

mellow hare
#

And you made sure to change the site domain in the config.yml?

#

That's one of the things I had to correct

green oriole
#

There is no config.yml atm for the site repo, do I need to create it?

molten bough
#

yeah, it's in the guide on the wiki

green oriole
#

Oh okay I didn't checked the wiki

hardy gorge
#

wait, what? You're only running the site's tests, right?

green oriole
#

But the site is hosted on 0.0.0.0:8000 atm

#

So I changed it somewhere

#

Yep ves

hardy gorge
#

Did you set the DEBUG flag in your environment variables?

#

site does not have a config.yml

molten bough
#

oh right, site tests

green oriole
#

No because DEBUG randomize the key, I just override ALLOWED_HOSTS in the env file

molten bough
#

for the site, I have these env vars set:

DATABASE_URL=postgres://pysite:pysite@localhost:7777/pysite
SECRET_KEY=suitable-for-development-only
STATIC_ROOT=/tmp/django_static
green oriole
#

I have the same plus ALLOWED_HOSTS

molten bough
#

I'm using PyCharm's test runner though

hardy gorge
#

You need to set PARENT_HOST then as well

green oriole
#

I use pipenv run test

hardy gorge
#

check settings.py, there are a number of things that change if you're in DEBUG mode

green oriole
#

I'm not in debug mode

molten bough
#

I wish debug didn't randomise the secret key

hardy gorge
#

Specifically this:

if DEBUG:
    PARENT_HOST = env('PARENT_HOST', default='pythondiscord.local:8000')

    if ":" in PARENT_HOST:
        ALLOWED_HOSTS.append(PARENT_HOST.split(":", 1)[0])
    else:
        ALLOWED_HOSTS.append(PARENT_HOST)
else:
    PARENT_HOST = env('PARENT_HOST', default='pythondiscord.com')
molten bough
#

it's annoying to be testing something and have to login again every time you change a file

last patio
#

wait arent we reading from enc

#

v

green oriole
#

Actually we can change that

molten bough
#

well yes, but it should still be unique per instance

green oriole
#

The key is randomized if debug mode is on

molten bough
#

so it'd need to save a dotfile somewhere or something

hardy gorge
#

The key is not loaded from env in debug mode, yeah

green oriole
#

Everyone use the suitable-for-dev... key

hardy gorge
#
if DEBUG:
     # Removed intermediate lines
    SECRET_KEY = secrets.token_urlsafe(32)
green oriole
#

I mean, if we are in debug mode we can still read it from the env

hardy gorge
#

yes

#

it's just that it's not configured like that

green oriole
#

Change it?

hardy gorge
#

I think it will work without issue, but I'm not confident enough about our set-up to make that call

green oriole
#

The prod server doesn't run in debug mode anyway?

hardy gorge
#

@crude gyro According to git blame you specifically removed the hardcode secret key for debug mode

#

So, there must have been a reason

#

The commit message simply says Replacing hardcoded secret keys with token_urlsafe calls., so it doesn't give me the reason

crude gyro
#

uh.. when?

#

for what repo

green oriole
#

Site

hardy gorge
#

site in settings.py for DEBUG mode

molten bough
#

haha, good placeholder

crude gyro
#

but.. why would you need that

hardy gorge
#

otherwise you need to login after every change

#

since the secret_key would change on reload

crude gyro
#

oh. I thought settings would just be loaded once.

#

that's fine though, just change it back.

#

the old one was pretty good.

hardy gorge
#

I don't think we even need a configurable one

crude gyro
#

I have no idea why I did it.

hardy gorge
#

just a constant does the job for DEBUG

#

there must have been a reason

#

but, I can't think of one

crude gyro
#

was probably just a commit in a string of security related commits

#

would be interesting to see the neighboring commits. they're likely very similar, hopefully less bug introducing

#

or maybe I just wanted to use token_urlsafe for something cool

hardy gorge
#

haha

#

okay

#

ah

#

It's the linter