Skip Navigation

InitialsDiceBearhttps://github.com/dicebear/dicebearhttps://creativecommons.org/publicdomain/zero/1.0/„Initials” (https://github.com/dicebear/dicebear) by „DiceBear”, licensed under „CC0 1.0” (https://creativecommons.org/publicdomain/zero/1.0/)LS
Posts
7
Comments
222
Joined
1 yr. ago

  • Projection huh? I expect this in a political, not a python community. Vet psyche techniques somewhere else.

    Instead of attacking the messenger, why not follow advice and just do the maintenance work?

    I'm warning others away from an author that has neglected to do package maintenance, but then continues to do marketing?

    In any other market, this is the pattern of a con artist. Gaslighting is also expected from a con artist.

  • Luckily the Python community is home to giants. sqlalchemy author is one such giant and he has something of interest to contribute to this conversation. But first i bore you with stuff we all already know.

     
        
    from typing import AsyncIterator, Iterator
    import contextlib
    
    @contextlib.asynccontextmanager
    async def somecoroutine() -> AsyncIterator[int]:
        teardownfcn = lambda : None
        something = 4
        try:
            yield something
        finally:
            teardownfcn()
    
    @contextlib.contextmanager
    def somefunction() -> Iterator[int]:
        teardownfcn = lambda : None
        something = 4
        try:
            yield something
        finally:
            teardownfcn()
    
    async with somecoroutine() as stuff:
        print(f"some int {stuff!s}"
    
    with somefunction() as stuff:
        print(f"some int {stuff!s}"
    
      

    Although not a class, this pops out an AsyncIterator and shows sync equivalent.

    From deep in the bowels of sqlalchemy

     
        
    from sqlalchemy.ext.asyncio.base import GeneratorStartableContext, asyncstartablecontext
    
    @asyncstartablecontext
    async def somecoroutine() -> GeneratorStartableContext[int]:
        teardownfcn = lambda : print("Cookie monster says, yum yum yum")
        someiterable = [1,2,3]
        try:
            yield from someiterable
        except GeneratorExit:
            pass
        else:
            teardownfcn()
    
    # no teardown
    gen = await somecoroutine()
    for thecount in gen:
        print(f"The Count says, {thecount!s}")
    
    # teardown occurs
    async with gen in somecoroutine():
        for thecount in gen:
            print(f"The Count says, {thecount!s}")
    
    
    
      

    Should print

     
        
    The Count says, 1
    The Count says, 2
    The Count says, 3
    The Count says, 1
    The Count says, 2
    The Count says, 3
    Cookie monster says, yum yum yum
    
      

    The decorated function can be called either as async with fn(), or await fn(). This is decidedly different from what @contextlib.asynccontextmanager supports, and the usage pattern is different as well.

    Above, GeneratorExit is caught if the function were used as an await. In this case, it's essential that the cleanup does not occur, so there should not be a finally block.

    If GeneratorExit is not invoked, this means we're in __aexit__ and we were invoked as a context manager, and cleanup should proceed.

    So instead of a class with __anext__ and __aiter__ an asyncstartablecontext with yield from could be a possible alternative.

  • I don’t use async Python normally

    Great! The Ludwicks have been waiting for a champion of blocking I/O to emerge. Where world+dog-FizzyOrange preference lies is 100% clear and has been since before we were born. Even us lowly Python devs prefer fast over idle CPUs.

    This is why initially liked fastapi. It says fast right there in the name. It's curiously not named, abandonwareapi.

    Typer adds a maintenance burden that, as SQLModel 70+ PRs attest, the author does not have time for. No other details are necessary to know. Abandonware is really just a time sink hurting everyone pulled in.

    I'm not unreasonable. Fix the situation with SQLModel and my attitude will flip from critic --> supporter. And then will appreciate and look forward to posts about: fastapi, SQLModel, and Typer. Past grievances will be memory holed.

  • Apples and oranges comparison

    typer under the hood is click. Which you are right click is better than argparse cuz it's optparse.

    Left scratching my head, are you praising, click? What is your typer sales point over plain ol' click.

    Some questions

    1. combining typer and click. Shows how to use click and/or typer to group sub-commands.
    2. wake up, trio (and as a crutch anyio) is a thing. Making click and typer (and pathlib.Path) immediately legacy. No matter what it does. Here is the click trio port trio-click. Which i just checked, is actively maintained.

    Where is the typer trio port?

    1. Upon hearing cli, i think textual, not click (or now typer). So as the cli grows, the UI/UX becomes clunky. Splitting the source code into multiple modules doesn't change that. typer has examples with: progress bar, prompt, cli application directory, and launch applications. All which is better accomplished from an actual cli GUI.
  • Here is a bug fix where even a drug addict could see it's merge worthy.

    Could fall off the bar stool semi-conscious and still be able to acknowledge it's merging worthy.

    Just click the freak'n YES button.

    Why market a package that is stuck in the WindowsXP era?

  • Why single out lack of docs for foreign keys? The docs do deal with one to many and many to many relationships. Step by step.

    The trick is finding that page. It's there, just TOC is wonky. Unnecessarily hard to find things.

    Foreign keys howto is a minor issue compared to the 70 PRs in the waiting queue.

    Production? SQLModel is not production ready. I can name 70 reasons why not.

    Please Sebastián bring on other maintainers with PR approval authority. Only this would be a game changer.

  • Probably most projects are as guilty as tiangolo. Myself included. How to scale to multiple maintainers? Tell me about your experience. Would like to know how to avoid this trap.

    This seems to be a github weakness. Each of us individually contributes by making a great package. Folks start using it and situation does not scale.

    Rinse wash repeat

  • If only would be so lucky. Truly i don't mind. Here go at

    Purposefully do not have any code of conduct for any of my packages. And i have not joined python.org to avoid submitting to a code of conduct.

    Everyone is welcome to be themselves. If something hurtful is said, i'll take it in stride without barraging the commenter with Captain obvious sweet nothings.

    You troll, i disparage. It's not so different. Except for the two fresh super hero creation stories.

    For the love of cosplay and super hero conventions, for a moment could put down those tunnel vision goggles to acknowledge the well written prose. Or not, but that's on you

  • Dear OP

    SQLModel looks unmaintained. The PRs are languishing in purgatory waiting for the submitters to croak from old age. I died a little inside (see imdb all reviews must start with a drama queen comment like this) noticing the PR count has just achieved 70 PRs as of today. Which must be an achievement in project mismanagement.

    According only from the release notes, the last real release was sqlmodel-0.0.23 on Feb 28th 2025. For those keeping score today is Aug 8th 2025

    Most activity is bots upgrading gh actions and precommit autoupdate. aka commit spam.

    The last human commit was Jun 19th fixing some tests for the docs.

    This is a sell point for litestar. Bypassing pydantic also bypasses the horror show of SQLModel.

    Will look into msgspec+litestar

  • Nowhere was the term, idiot, uttered. It's not an issue IQ solves. If it's possible to just submit more PRs harder this situation would only worsen. No matter how many PRs or how well intentioned.

    nuance is lost cuz the details keep piling up and its overwhelming. Have mercy! Provide a checklist. At the end of the checklist write This is everything you must do. There is nothing more. You are done!

    You need to learn about humility

    One more thing to add to the checklist. Is that sqlalchemy create_engine params, pass through dbapi drivers params, or sqlite peculiarities humility? And ask yourself if you want to be constantly thinking if only i was more humble create_engine would always work as expected, without worries, or in this case, without reframing (the conversation).

    Are you seeing my point, the guy who points others to the contributing page?

    The guy in charge of random database objects names does not harbor ill-intent, the heat he is packing in his pants is sufficient, he is in no way inadequate, in one way or another.

    He's overwhelmed. And along the way, nuance is lost.

    The guy in charge of random database objects names is legion. And if not him, someone and something else.

    Hmmm seem to have misplaced that checklist, it's gotta be around here somewhere.

  • btw my favorite super hero is the mustache guy from Deadpool. All time favorite.

    Made a very convincing argument that what the super hero universes need is a guy with a thick mustache who just happened to show up for the interview with that stash.

    That's what's been missing from every super hero team.

    As far as i can tell the mustache guy seems like a good blook.

    I hate good people with their good intentions, mustache guy didn't have good intentions. He just happened to want the job. Which was good enough for Deadpool.

    This is why i'm nominating the guy in charge of random database object names to the team.

    btw this is not off topic, read the SQLModel docs! All the examples are about super heroes and their teams. None of which i recognize cuz there also seems to be the guy who misspells super heroes and teams names

    Which sorta makes sense. Anyone who'd lower case all table names would probably not be above misspelling super heroes and teams names.

    Is there anything more sinister than lower casing all table names? And then ... get this ... preventing changing the table naming algo by hiding the implementation within a metaclass. Leaving the only option, to hardcode each and every table name.

  • Python @programming.dev

    the guy in charge of random data base object names

  • Finally got to a Python question

    On Nix(OS) can i setup a python development environment from requirements files without ruffling the package managers feathers?

    When ready to create a wheel, python -m build, how does Nix(OS) want the python package to be built to gain all the benefits of Nix(OS) build reproducibility?

  • Other, maybe clearer, way to inspect references

    id(a) == id(b)

    Then reserve the use of is for bool or None.

    Python has a concept of, Just don't do that. Which would be a great title for this topic thread.

  • Eww eww eww, I have a good one!

    function argument: params vs **params

    Assume both are the same Mapping.

    The former can update in-place. The later, nope.

    If the function is a generic function or one of the overloads. Wait what's that? It's the term used by functools.singledispatch to describe the fallback function when no overload function handles the case.

    Anyway

    Any param to either singledispatch generic or an overload, Whatever you throw at it, won't be in-place updatable.

  • Being able to have different package versions live side by side, is mind blowing. Most people would resort to flatpak or docker to contain that packages dependencies and transitive dependencies. But the amount of redundant packages must be mind blowing.

    To not need all those redundant packages is an impressive feat!

  • The term is used by the trio package author. You are in for a treat! Go read the docs for trio right now! Then anyio.

    Take what the trio author has to say very very seriously.

    The term colored function means, in order to support concurrency, needing to modify a function with special language syntax, in this case, async.

  • ok fine lets talk about this Linux distro

    Don't want to be a package manager database on my off hours. Why is having users manage every transitive dependency a good design?

    I'm asking i really don't understand the merits of adopting this heavy burden

  • Programming Horror @programming.dev

    duck hunting

    Python @programming.dev

    Dependency management

    Python @programming.dev

    Feedback on gh profile design

    Python @programming.dev

    Whats in a Python tarball

    Python @programming.dev

    PEP 735 does dependency group solve anything?

    Python @programming.dev

    constraint vs requirement. What's the difference?