{"id":16744809,"url":"https://github.com/marteinn/atomicpress","last_synced_at":"2025-04-10T13:42:20.696Z","repository":{"id":21247229,"uuid":"24562706","full_name":"marteinn/AtomicPress","owner":"marteinn","description":"A static blog generator (based on flask)","archived":false,"fork":false,"pushed_at":"2019-10-22T23:18:32.000Z","size":208,"stargazers_count":5,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-03-24T12:21:38.672Z","etag":null,"topics":["blog","flask","static-site-generator"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marteinn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-09-28T15:26:46.000Z","updated_at":"2020-07-04T06:44:42.000Z","dependencies_parsed_at":"2022-09-11T18:50:26.341Z","dependency_job_id":null,"html_url":"https://github.com/marteinn/AtomicPress","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marteinn%2FAtomicPress","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marteinn%2FAtomicPress/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marteinn%2FAtomicPress/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marteinn%2FAtomicPress/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marteinn","download_url":"https://codeload.github.com/marteinn/AtomicPress/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247968379,"owners_count":21025823,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","flask","static-site-generator"],"created_at":"2024-10-13T01:44:10.756Z","updated_at":"2025-04-10T13:42:20.674Z","avatar_url":"https://github.com/marteinn.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AtomicPress\n\nAtomicPress is a static blog generator for python developers that don't want the Wordpress security hassle.\nIt is built in Flask and takes advantage of it's awesome eco-system such as Flask-Freeze, Flask-Admin, Flask-Migrations, Flask-SQLAlchemy, to mention a few. It utilizes SQLite for its database needs.\n\n\n## Features\n\n- Posts, Pages, Categories, Tags and Authors (like WordPress).\n- Markdown rendering\n- Theme support\n- Import from Wordpress\n- Gist integration\n- A simple admin interface\n- Build you own extensions\n- Sync your generated blog with either FTP or to Amazon S3\n\n\n## Why not Pelican/Jekyll/Octopress/Hyde? \n\n1. AtomicPress is built in Python.\n2. It is built upon Flask, which is easy to extend.\n3. It's built to make Wordpress import simple.\n\n\n## Installation\n\nAtomicPress can easily be installed through pip.\n\n    pip install atomicpress\n\n\n### Develop\n\n    pip install git+git://github.com/marteinn/AtomicPress.git@develop\n\n\n## Getting started\n\nTo install AtomicPress you'll need python 2.7, virtualenv and pip.\n\nIf you want a quickstart, just copy the example `base-example`, cd and type `make init` and you are ready to go.\n\n\n## Settings\n\n- `SQLALCHEMY_DATABASE_URI`: Path to your sqlite database.\n- `DEBUG`: Show errors, should be deactivated for live environments.\n- `SECRET_KEY`: Session key for signing.\n- `STATIC_URL`: Path to the static content, default: `/static/`\n- `UPLOADS_URL`: Path to the uploads folder, defult `/uploads/`\n- `THEME`: The theme you want to run, default is `atomicpress.themes.minimal`.\n- `GIST_BACKEND_RENDERING`: If you want to render a `\u003cnoscript\u003e\u003c/noscript\u003e` that contains the gist content as pure text. Default is `False`\n- `EXTENSIONS`: A array with the extensions you want to run.\n- `MARKDOWN_EXTENSIONS`: A list with the active [markdown extensions](https://pythonhosted.org/Markdown/extensions/index.html).\n\n### S3\n- `AWS_ACCESS_KEY_ID`: Access key id to aws.\n- `AWS_ACCESS_KEY`: Access key to aws.\n- `AWS_REGION`: The region your bucket is places (optional).\n- `AWS_S3_CALLING_FORMAT`: A boto setting (uses SubdomainCallingFormat by default) (optional).\n- `S3_BUCKET`: The bucket you want to deploy to.\n- `S3_DESTINATION`: The path within the bucket you want to deploy to.\n\n### FTP\n\n- `FTP_HOST`: Hostname to your ftp account.\n- `FTP_USERNAME`: Ftp username.\n- `FTP_PASSWORD`: Ftp password.\n- `FTP_DESTINATION`: Ftp sup\n\n## Admin\n\nAtomicPress uses Flask-Admin to show a admin interface, you can access it by running `runserver` with the argument `-a` (admin). Per default is located at `http://localhost:5000/admin/`.\n\n\n## Themes\n\nAtomicPress ships with the theme minimal per default, if you would like to make your own, just specify the path in your settings file.\n\n    THEME=mytheme\n\nTo make your own, just look at the theme [minimal](https://github.com/marteinn/AtomicPress/tree/develop/atomicpress/themes/minimal) that ships with AtomicPress.\n\n## Filters\n\nAtomicPress comes with a couple of filters you can use in the post content area.\n\n### code\n\nRender a basic code snippet.\n\n    [code]var a = 1;[/code]\n    \u003e\u003e\u003e \u003cpre class=\"code\"\u003evar a = 1;\u003c/pre\u003e\n\n### gist\n\nEmbeds a more advanced code snippet through a github gist to content.\n\n    [gist id=\"asdasd\"]\n\n### image\n\nEmbed image path with the `[image]` filter.\n\n    \u003cimg src=\"[image id=\"myimage.jpg\"]\" /\u003e\n    \u003e\u003e\u003e \u003cimg src=\"/uploads/myimage.jpg\" /\u003e\n\nIf you only want the uploads path, you can use the `[uploads]` filter.\n\n    \u003cimg src=\"[uploads]myimage.jpg\" /\u003e\n    \u003e\u003e\u003e \u003cimg src=\"/uploads/myimage.jpg\" /\u003e\n\n## Commands\n\n### Database\n\n#### Create database\n\nCreates the database and stores it according to the SQLALCHEMY_DATABASE_UR path.\n\n    python mange.py create_db\n\n#### Remove database\n\nRemoves the sqlite database file.\n\n    python mange.py drop_db\n\n**Options**\n\n    -r (remove) Remove the sqlite file when done.\n    -f (force) Do now show the agreement promp.\n\n#### Updating from a older version\n\nUpgrading from a older version? Run this to make sure the schema is up to date.\n\n    python manage.py upgrade -d=atomicpress/migrations/\n\n### Prefill db with initial data\n\nAdds initial data to the database, perfect when you want to try out AtomicPress.\n\n    python manage.py prefill fill\n\n\n### Server\n\n#### Runserver\n\nCreates a lightweight http server running the web application.\n\n    python manage.py runserver\n\n**Options**\n\n    -a (admin) Activate the admin area (do not do this in a production anvironment)\n    -t (toolbar) Show debug toolbar.\n    -d (debug) Show debug messages.\n\nNote: Although untested, it is possible to run AtomicPress as a standard wsgi application.\n\n\n### Import\n\nAtomicPress uses [wpparser](https://github.com/marteinn/wpparser/) to import data from wordpress export files. Just specify the path to your database export and you are ready to go.\n\n    python manage.py importer import_blog -f=./data/blog.wordpress.2014-09-25.xml\n\n**Options**\n\n    -f (file) Path to wordpress export file.\n\n### Export\n\nCreate a static package of you blog, that are ready to be deployed.\n\n    python manage.py exporter export\n\n### Sync\n\n#### S3\n\nSend the exported static files to a AWS S3 bucket.\n\n    python manage.py s3 sync\n\n#### FTP\n\nSend the files to your ftp account.\n\n    python manage.py ftp sync\n\n\n## Extensions\n\n### Toggle extensions\n\nAtomicPress uses a pluggale extension system, similar to django's INSTALLED_APPS.\nTo disable a plugin, define a property in your settings file and just define the ones you need.\n\n    EXTENSIONS = (\n        # \"atomicpress.ext.importer\",\n        \"atomicpress.ext.exporter\",\n        \"atomicpress.ext.ftp\",\n        \"atomicpress.ext.s3\",\n        \"atomicpress.ext.prefill\",\n    )\n\nActivating you own is also simple, like this extension called catpictures:\n\n    EXTENSIONS = (\n        \"atomicpress.ext.importer\",\n        \"atomicpress.ext.exporter\",\n        \"atomicpress.ext.ftp\",\n        \"atomicpress.ext.s3\",\n        \"atomicpress.ext.prefill\",\n        \"catpictures\",\n    )\n\n### Create extension\n\nTo create a extension, create a module with a function called setup. Thats all you need.\n\n\n## Contributing\n\nWant to contribute? Awesome. Just send a pull request.\n\n\n## License\n\nAtomicPress is released under the [MIT License](http://www.opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarteinn%2Fatomicpress","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarteinn%2Fatomicpress","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarteinn%2Fatomicpress/lists"}