GithubHelp home page GithubHelp logo

bloggart's Introduction

Bloggart is a blog application for Google App Engine. It’s currently being developed as a demonstration app for a series of blog posts, but is intended to be a useful and versatile blogging system for App Engine by the time it’s done.

bloggart's People

Contributors

aht avatar andialbrecht avatar arachnid avatar cyberphobia avatar detro avatar gert-jan avatar rctay avatar sahid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bloggart's Issues

VersionInfo and cse, search are not created after a datastore clear

If I delete everything without uploading a new version, then VersionInfo, cse, search will not be recreated. First we have to upload a new version.

CURRENT_VERSION_ID is not changed, so it will raised an error.

def run_deploy_task():
"""Attempts to run the per-version deploy task."""
task_name = 'deploy-%s' % os.environ['CURRENT_VERSION_ID'].replace('.', '-')
try:
deferred.defer(try_post_deploy, _name=task_name, _countdown=10)
except (taskqueue.TaskAlreadyExistsError, taskqueue.TombstonedTaskError), e:
pass

sitemap traceback

AttributeError: 'module' object has no attribute 'google_sitemap_ping'

Delete old static pages with useless tags

If a tag doesn't exist anymore, the static pages are still there with this path : tag/my_deleted_tag.

We can delete this tag after we publish a new post or add a "clean job" that delete all orpheans.

Set bug : def _regenerate_sitemap():

I've finished to update bloggartornado with the last changes but I've an error here :

set('/sitemap.xml', rendered, 'application/xml', False)
TypeError: set expected at most 1 arguments, got 4

To fix my version : import static and static.set
Maybe you have the same issue ?

def _regenerate_sitemap():
import static
paths = _get_all_paths()
rendered = render_template('sitemap.xml', {'paths': paths})
static.set('/sitemap.xml', rendered, 'application/xml', False)

Blog home page throws 404 error

The main page of the blog '/' shows a big fat whooops. I checked the settings in config.py and everything seems to be in order. I'm running in the SDK on localhost on Linux. Any tips? Thanks

Add friendly variables in template

For people that "only" want to create a theme, I think these django tags are not very friendly and they have to check the code to understand them.

{% ifequal generator_class "IndexContentGenerator" %}
{% ifequal handler_class "AdminHandler" %}
{% ifequal path "/admin/newpost" %}

Maybe this could be replace with nice and easy variable :

{% if index %}
{% if admin %}
{% if new_post %}
etc,...

then it could be nice to create all :

{% if atom %} #atom generator
{% if edit_post %} #edit a post
{% if tag %} #tag generator
etc,....

<type 'exceptions.ImportError'>: No module named aetycoon

I just download the app and set it up, but when I launch it and run, it says:

< type 'exceptions.ImportError' > : No module named aetycoon

there is a lib/aetycoon/__init__.py file, it looks like it's ok, but it crashes when I try to run.

the error happens on static.py line 14, right where I import aetycoon.

what could it be?

Relative calls in {% extend %} is a bad practice

In admin templates base.html call {% extend "../base.html" %}. I'm try it with other Django version and its stop working. Seems like it is bad practice and you can't guaranty that it will work. So may be best way is divide admin and user templates or move both to same folder.

Admin Redirect Issues in firefox ( not chrome )

Ok, so here is as much relevant information as possible since I've only installed bloggart a few minutes ago.

In firefox 3.6 ( linux ) if i goto the /admin/* page i get redirected to login, after successful login i keep getting redirected BACK to the google login. this does not happen in chrome and works as it should.

"No module named markdown"

git clone git://github.com/Arachnid/bloggart.git
git submodule init
git submodule update

"Run" using Google AppEngine Launcher
Visit http://localhost:8080, see 404 error
Visit http://localhost:8080/admin/, see stack trace for an exception thrown in the 'import markdown' line in markup.py:

<type 'exceptions.ImportError'>: No module named markdown
args = ('No module named markdown',)
message = 'No module named markdown'

I've installed Python 2.5.4 from python.org and AppEngine is using this. I've done nothing else, and made no modifications to bloggart. I couldn't see any other instructions so I assumed this was all that was required.

Have I just missed out some important step or is this an actual issue?

License?

I'm interested in this code, but couldn't find what license it was released under. I suggest BSD or MIT.

Category to which the blog belongs

As i guess there is no way i can put a post in a category and show the category in right sidebar. Would be nice if that is implemented.

TypeError: cannot concatenate 'str' and 'NoneType' objects

I thought I'd give bloggart another go now that the last issue I opened has been fixed. Same steps as before;

git clone git://github.com/Arachnid/bloggart.git
git submodule init
git submodule update

"Run" using Google AppEngine Launcher
Visit http://localhost:8080

Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3177, in _HandleRequest
self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3120, in _Dispatch
base_env_dict=env_dict)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 515, in Dispatch
base_env_dict=base_env_dict)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2379, in Dispatch
self._module_dict)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2289, in ExecuteCGI
reset_modules = exec_script(handler_path, cgi_path, hook)
File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2185, in ExecuteOrImportScript
exec module_code in script_module.dict
File "D:\somewhere\bloggart\static.py", line 21, in
ROOT_ONLY_FILES = ['/robots.txt','/' + config.google_site_verification]
TypeError: cannot concatenate 'str' and 'NoneType' objects

Only the tag path should be slugified

After the last commit, the tag and its path are slugified.
Only the path should be slugified.

Example : my tag = "Héllo", the path should be /tag/hello but "Héllo" must always be displayed.
i.e: Héllo and not hello

Index pages and tags renaming

If a tag is renamed, index pages are not regenerated

Add content.tags to the Etag

class ListingContentGenerator(ContentGenerator):
@classmethod
def get_etag(cls, post):
return hashlib.sha1((post.title + post.summary + str(post.tags)).encode('utf-8')).hexdigest()

Support for tag based atom feeds

Just a feature request. At the moment, the atom feeds are for entire blog, tag based atom feeds will be useful to share specific tagged feeds to others. Livejournal amongst other systems had this feature.

BTW, this the project actively maintained?

A way to disable caching

It's a big trouble to edit templates currently - after each update a user is required to update a blog entry to make the changes visible.

It'd be quite useful for me to have a config variable turning off the internal caching system. Or how do you debug changes in templates?

Support suggestions for tags

When we create a POST we should select the TAG in a list.
So it's easier to rename/delete a TAG and to select always the "good" one.

It can avoid to have very very similar tags : example : appengine, gae, google app engine,...

Atom feed has new entry for every edit to a post

I'm not sure if this is the intended behaviour or not, but I find it very odd and annoying. If I edit an old post (say, to clean up formatting after an import from another blog), any reader subscribed to the Atom feed will report a new unread entry. I don't know if this is an issue with Bloggart or with feed readers and feeds in general; if it's nothing to do with Bloggart please close this issue.

Please add an __init__.py file to the project root

Hi,

Please consider adding an empty init.py file to the project root. Here's why.

I'm using bloggart under a custom prefix ('/blog/'), with a buildout-based application. The easiest way for me to set it up is to use http://github.com/zerok/zerokspot.gitrecipe/ to grab the latest revision from github.

I don't change anything to the code, I just have a custom dict with my own settings and scripts that look like this (pseudocode):

# my_custom_static.py:
from somewhere import my_custom_settings
# mangle sys.path to insert bloggart's directory
# (which is actually a symlink as I use rod.recipe.appengine
# to put things together for me)
import config # this is bloggart config
[setattr(config, *item) for item in my_custom_settings.iteritems()]

# Then do the rest
from static import main # this is your static.py
if __name__ == '__main__':
    main()

As you can see, it is quite frustrating and also it's hard not to make filename clashes. If you'd add an init.py to the root, that probably wouldn't change anything for your code if run stand-alone, but my code would be much cleaner as I could use your code like a package, without manging my sys.path.

Add a preview feature

I think it was not on the list, so it could be a nice feature : preview a post before posting.

Atom, islice error

django does silent failure (bad I think or it should be disabled), tornado not so it's easier to check error.

So, I think there is an error here in your atom feed :
{{posts.0.updated|date:"Y-m-d\TH:i:s\Z"}}

because : posts = itertools.islice((x for x in q if x.path), 10)
and posts[0] will fail
TypeError: 'itertools.islice' object is unsubscriptable

It's blank in blog.notdot.net :

Djangoforms should be removed

I think Djangoforms should be removed for 2 reasons :)

1 - Personaly, (so not very important :p ), I think that djangoforms is overkill for only 3 text fields.

2 - Most important this time : Djangoforms goes against the second rule of bloggart "Good isolation of code and markup. Users shouldn't have to understand the innards of our blogging software if all they want to do is change how the blog looks or is laid out." and particulalry for 2 things :

  • theming : for example height, width,... are set inside .py files and depend on the Djangoform. Not very easy to change this if you want to skin this part.
  • i18n : I'd like to support english and french for the admin part, but currently I can't translate the labels "title", "body" and "tags". They are part of the djangoforms.

So I think it could be a nice feature to remove Djangoforms and to use for example jquery to check the forms (mandatory fields) and add a nice alert box (jalert : http://abeautifulsite.net/notebook_files/87/demo/)... and maybe start a little Ajax (for the preview for example,...)

And example of jquery code to validate the form (it has to be checked server side too)

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> ``` $(function() { $("input[name=title]").select(); $("form.compose").submit(function() { var required = ["title", "body", "tags"]; var form = $(this).get(0); for (var i = 0; i < required.length; i++) { if (!form[required[i]].value) { $(form[required[i]]).select(); return false; } } return true; }); }); ```

Support "Expires" and "Cache-Control" headers

I think the Static handler should support the "Expires" and "Cache-Control" headers.

It could be particularly useful if you want to add an image gallery or something like that. Most of the time, images are cached indefinitely.

Tab label on "Edit a post"

If I edit a post, the tabs (HOME / POSTS / NEW POST) should be (HOME / POSTS / EDIT POST)

  • change "NEW POST" -> "EDIT POST"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.