Live data from Hacker News

Show HN: A Python native engine for web development

github.com

11–17 of 17 posts

Re: Show HN: A Python native engine for web development

#11
post #5
post #3

Sorry, but this is really not suitable for much. There is so much wrong with this implementation that I’m not sure where to start. Every call to your template writes to a single file called “index.html”[1] which is then copied to another file when “written”[2]? You also print exceptions rather than allowing people to handle them as they wish. The idea is nice, but try and remove all file system calls and do this enti…

Yeah, you're absolutely right, I wasn't able to really think of another way to implement it. [2] was meant to be implemented with Flask, which is optional, so the files can directly be written to templates/ and static/. We're actually changing this. Can you give a few suggestions on how it must be implemented? We want to work on this

Unlike Ruby Python doesn't have great facilities for writing making implicit APIs like this:

   with Table():
      header(...)
      row(...)
You can do something like this but I'd recommend against it as it involves a lot of magic and has trade-offs which make it an uncommon choice. Instead you'd do something like:

    with Table() as table:
        table.header(...)
        table.row(...)
This follows through to your template API as well. So you'd want to construct an object that represents your template, and have methods on that to add a table. For example:

    page = sierra.Page(...)
    with page.div(...), page.add_table() as table:
       table.header(...)
       table.row()
   
    print(page)  # __str__() should return the raw HTML response
This simplifies things, and you can use an in-memory StringIO object rather than a file. You can then return this string to flask as a text/html response and avoid Jinja2 entirely.

Also don't use CamelCase, please! It looks very unpythonic.

However you're really trying to create an API for producing a tree of nodes (some of which might logically map to individual tags, some of which might not) which are then serialized to HTML.

I'd recommend looking at how you can use BeautifulSoup for a lot of this. BS4 contains a lot of classes and functions for creating trees of HTML-like nodes, so you could use this rather than a StringIO object and directly writing "" and having to support all of the attributes as method arguments. You could just use "soup.new_tag(element, *kwargs)" and only do something "special" when handling pandas dataframes or other stuff (like ol/ul tags).

Check out the BS4 documentation and methods for tree manipulation here: https://www.crummy.com/software/BeautifulSoup/bs4/doc/

Re: Show HN: A Python native engine for web development

#12
post #11
post #5

Earlier quoted context omitted.

Yeah, you're absolutely right, I wasn't able to really think of another way to implement it. [2] was meant to be implemented with Flask, which is optional, so the files can directly be written to templates/ and static/. We're actually changing this. Can you give a few suggestions on how it must be implemented? We want to work on this

Unlike Ruby Python doesn't have great facilities for writing making implicit APIs like this: with Table(): header(...) row(...) You can do something like this but I'd recommend against it as it involves a lot of magic and has trade-offs which make it an uncommon choice. Instead you'd do something like: with Table() as table: table.header(...) table.row(...) This follows through to your template API as well. So you'd…

'This simplifies things, and you can use an in-memory StringIO object rather than a file. You can then return this string to flask as a text/html response and avoid Jinja2 entirely.'

I didn't think of this until you mentioned this, so might do that. But I don't get the 'avoid Jinja2 entirely' part. Jinja2 is avoided with the current syntax already (which is definitely changing).

About BeautifulSoup, the autoPrettify() function is actually from bs4, it is a dependency.

Yeah I know, camelCase IS unpythonic

Thanks again

Re: Show HN: A Python native engine for web development

#13
post #12
post #11

Earlier quoted context omitted.

Unlike Ruby Python doesn't have great facilities for writing making implicit APIs like this: with Table(): header(...) row(...) You can do something like this but I'd recommend against it as it involves a lot of magic and has trade-offs which make it an uncommon choice. Instead you'd do something like: with Table() as table: table.header(...) table.row(...) This follows through to your template API as well. So you'd…

'This simplifies things, and you can use an in-memory StringIO object rather than a file. You can then return this string to flask as a text/html response and avoid Jinja2 entirely.' I didn't think of this until you mentioned this, so might do that. But I don't get the 'avoid Jinja2 entirely' part. Jinja2 is avoided with the current syntax already (which is definitely changing). About BeautifulSoup, the autoPrettify(…

When you do “render_template()” Flask uses jinja2 - it will read it, pass it to jinja2 and render the response. This is what I meant by avoiding jinja2 entirely.

Good luck!

Re: Show HN: A Python native engine for web development

#14
post #13
post #12

Earlier quoted context omitted.

'This simplifies things, and you can use an in-memory StringIO object rather than a file. You can then return this string to flask as a text/html response and avoid Jinja2 entirely.' I didn't think of this until you mentioned this, so might do that. But I don't get the 'avoid Jinja2 entirely' part. Jinja2 is avoided with the current syntax already (which is definitely changing). About BeautifulSoup, the autoPrettify(…

When you do “render_template()” Flask uses jinja2 - it will read it, pass it to jinja2 and render the response. This is what I meant by avoiding jinja2 entirely. Good luck!

Oh render_template(), yeah. Thanks

Re: Show HN: A Python native engine for web development

#15
post #13
post #12

Earlier quoted context omitted.

'This simplifies things, and you can use an in-memory StringIO object rather than a file. You can then return this string to flask as a text/html response and avoid Jinja2 entirely.' I didn't think of this until you mentioned this, so might do that. But I don't get the 'avoid Jinja2 entirely' part. Jinja2 is avoided with the current syntax already (which is definitely changing). About BeautifulSoup, the autoPrettify(…

When you do “render_template()” Flask uses jinja2 - it will read it, pass it to jinja2 and render the response. This is what I meant by avoiding jinja2 entirely. Good luck!

But the issue when I avoid render_template() is this: I can't add the CSS file along with the HTML one, unless I create a tag at the end of the file that has all of the CSS content. Can you comment on that?

Re: Show HN: A Python native engine for web development

#16
It's probable that inexperienced workers (of all ages) will come across this and deploy it to unsuspecting small businesses because both want to ride the Python Way.

I think in the future Microsoft's LinkedIN will verify everyone and Microsoft's Github will require a LinkedIN account. In the meantime, Caveat Emptor if you let RedFox2 BrainStormYourWayIN.

Re: Show HN: A Python native engine for web development

#17
post #16

It's probable that inexperienced workers (of all ages) will come across this and deploy it to unsuspecting small businesses because both want to ride the Python Way. I think in the future Microsoft's LinkedIN will verify everyone and Microsoft's Github will require a LinkedIN account. In the meantime, Caveat Emptor if you let RedFox2 BrainStormYourWayIN.

I have no idea what you're saying lol
Post reply on HN