{ "info": { "author": "Musharraf Omer", "author_email": "ibnomer2011@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![Build Status](https://travis-ci.org/mush42/oy-cms.svg?branch=master)](https://travis-ci.org/mush42/oy-cms)\n\n## Oy content management system\n\n**Oy** is a lightweight, modular, and extensible content management system (CMS) based on the **Flask** micro-framework.\n\n**Oy** provides you with a flexible, full-fledged CMS engine, without hiding away the elegant Flask API behind a custom facade.\n\n**oy** implements the following content management features:\n\n* A base **Page** model containing comprehensive metadata fields\n* Pages are managed in a tree using nested sets which allows for faster traversal of the page tree\n* Routing to any page type is handled transparently using the familiar decorator syntax\n* The ability to apply middlewares to modify page responses\n* A wide range of **Model Mixins** to easily build custom content types\n* Editable settings that users can edit in runtime (e.g, through the admin dashboard) which the developer/designer can use in code or templates.\n* An optional module system which augment **Flask Blueprints** with additional behavior\n* Makes perfect use of some of the best flask extensions (Flask-Admin, Flask-SQLAlchemy, Flask-Security..etc.)\n\n## Core Extensions\n\nBuilding on the top of this powerful core, **oy** provides most of it's functionality via **contrib packages** which use the familiar flask extension API.\n\nExtensions under the **oy.contrib** package supplies you with the following additional features:\n\n- * *oy.contrib.admin* providing the administration dashboard (based on Flask-Admin).\n- **oy.contrib.media** manage user uploads (images, and documents) through an intuitive interface, and attach them to models (uses the excellent file depot package).\n- **oy.contrib.form** easily design forms and publish them as pages, and view and download submissions through the admin\n- **oy.contrib.redirects** setup custom redirects\n- **oy.contrib.users** provides user management with an extensible user profiles.\n\n\n## Quick Start\n\nFirst things first, install **oy** via pip:\n\n```bash\n$ pip install oy\n```\n\n**Oy** provides the **oyinit** command to help you scaffold your new projects. To create a project with the default template, navigate to your projects directory and run:\n\n```bash\n$ oyinit mysite\n```\n\n```bash\n\nCreating a new project called `mysite` from `...`\nUsing project template: default.\n~~~~~~~~~~~~\nNew project created at /home/projects/mysite\n\n```\n\nThen cd to the project directory and create the database with some demo content:\n\n```bash\n$ cd mysite\n$ oy createall\n```\n\n```bash\n\n~~~~~~~~~~~~\nCreating database tables...\nDatabase tables created.\nCreating a new super user account...\n\nsuper User created successfully.\n^^^^^^^^^^^^\nUser account details: the username is: admin and the password is the chosen password\nPlease change the default password.\n^^^^^^^^^^^^\n\n\nAdding some demo data to the database\n~~~~~~~~~~~~\n\nAdding demo data from module: oy.contrib.media\nAdding demo data from module: oy.contrib.form\nAdding demo data from module: oy.contrib.demo_content\nAdding demo data from module: mysite.home_page\n\n============\nFinished adding all available demo data.\n~~~~~~~~~~~~\n\n```\n\nFinally run the server:\n\n```bash\n$ flask run\n```\n\nThen visit your newly created site at [http://127.0.0.1:5000](http://127.0.0.1:5000) you will be greeted with the default home page. To edit the site content visit the administration dashboard at [http://127.0.0.1:5000/admin/](http://127.0.0.1:5000/admin/) and use the default account details: username=admin, password=adminpass.\n\n## Development\n\nTo develop oy locally, first clone the repo:\n\n```bash\n$ git clone https://github.com/mush42/oy-cms.git\n$ cd oy-cms\n```\n\nCreate a virtual environment and install the required packages from PYPI:\n\n```bash\n$ virtualenv .venv\n$ source .venv/bin/activate\n$ pip install -r requirements-dev.txt\n```\n\nThen cd to the frontend directory and install the frontend components:\n\n```bash\n$ cd frontend\n$ yarn install\n# or if you don't have yarn installed\n$ npm install\n```\n\nStatic assets are not pushed to the repository because they are generated automatically using **gulp**\n\nInstall gulp-cli globally, and then use gulp to build and copy the static files:\n\n```bash\n# install the gulp command line interface globally\n$ yarn global add gulp-cli\n# or if you don't have yarn installed\n$ npm -g -i gulp-cli\n\n# Then build and copy the static assets\n$ gulp clean\n$ gulp build\n$ gulp copy\n```\n\nFinally install **oy** in editable mode:\n\n```bash\n$ cd ..\n$ pip install -e .\n```\n\n## Contributing\n\n**oy** content management system is still in _alpha status_, contributions are more than wellcome. Help is needed in perfecting existing features as well as adding new ones.\n\nCurrently we are workon on the following areas:\n\n* Increasing test coverage\n* Implementing a RESTFUL API with sensible defaults\n* Migrating the **Gutenberg** block editor to oy in order for it to be used as the default rich-text widget\n* Using **React.js** to implement some admin widgets (inline fields, image and document choosers...etc)\n* Translations (i18n)\n\n## Why is it called **oy**?\n\nWe thought you already know. But in case you don't, here is a hint:\n\n> The Midwest, a deserted village, an already dead boy, a junky teenager, a black woman with two faces, and a serious man whom you don't want to mess with.\n\n## Licence\n\n**Oy CMS** is copyright (c) 2019 Musharraf Omer and oy contributers. It is licenced under the [MIT License](https://github.com/mush42/oy-cms/blob/master/LICENSE).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mush42/oy-cms", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "oy", "package_url": "https://pypi.org/project/oy/", "platform": "any", "project_url": "https://pypi.org/project/oy/", "project_urls": { "Homepage": "https://github.com/mush42/oy-cms" }, "release_url": "https://pypi.org/project/oy/0.1.7/", "requires_dist": [ "bcrypt (==3.1.6)", "filedepot (==0.6.0)", "Flask (==1.0.2)", "Flask-BabelEx (==0.9.3)", "Flask-Cors (==3.0.7)", "flask-marshmallow (==0.9.0)", "Flask-Migrate (==2.3.1)", "Flask-Security (==3.0.0)", "Flask-SQLAlchemy (==2.3.2)", "Flask-WTF (==0.14.2)", "fleep (==1.0.1)", "marshmallow-sqlalchemy (==0.15.0)", "marshmallow (==2.18.0)", "oy-libs-Flask-Admin (==1.5.3)", "oy-libs-sqlalchemy-mptt (==0.2.4)", "passlib (==1.7.1)", "Pillow (==5.4.1)", "python-dotenv (==0.10.1)", "speaklater (==1.3)", "SQLAlchemy (==1.2.17)", "SQLAlchemy-Continuum (==1.3.7)", "SQLAlchemy-Utils (==0.33.11)", "unicode-slugify (==0.1.3)", "validators (==0.12.4)", "WTForms-Components (==0.10.3)" ], "requires_python": "", "summary": "A lightweight, modular, and extensible content management system based on Flask.", "version": "0.1.7" }, "last_serial": 4909941, "releases": { "0.1.3": [ { "comment_text": "", "digests": { "md5": "608513be094253c053e960e705a6a601", "sha256": "29cada69e2e3698132f898036935411bfbae4ed27de85865bb21d900109aea64" }, "downloads": -1, "filename": "oy-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "608513be094253c053e960e705a6a601", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2086309, "upload_time": "2019-02-12T21:15:13", "url": "https://files.pythonhosted.org/packages/48/05/f37da5ff31e6237c4393276e6b4f828520e34b8d4b3b9736db11bad5708c/oy-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e6003e98f61153db72f0a32d2e1b7b9d", "sha256": "baa3d0b2e89eeb75a5bfe00e0142ded76933d96098aadd4fb7c3958f00327eb9" }, "downloads": -1, "filename": "oy-0.1.3.tar.gz", "has_sig": false, "md5_digest": "e6003e98f61153db72f0a32d2e1b7b9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1935593, "upload_time": "2019-02-12T21:18:35", "url": "https://files.pythonhosted.org/packages/38/cd/1841398fa7468e719ea7d2dfc93b0c746c9855b646716d477e6444d3e21c/oy-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "0d358cba7312b67e709aaba92469c446", "sha256": "51ceae79ff5ad7ec2ae3de91f4c48b0a2d2d000756778db95fbb061bebb35fe7" }, "downloads": -1, "filename": "oy-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0d358cba7312b67e709aaba92469c446", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2087754, "upload_time": "2019-02-13T12:35:26", "url": "https://files.pythonhosted.org/packages/f5/9d/da8d466cf39cc233e24dd15559ada2f7de6473df11767b869ef05b36c660/oy-0.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f29f0184995d7c91db50c2b29c032553", "sha256": "bad0d5d054b1698a730c0a5199529bcdf5f2f715ec2cab3ac04c4b9643bd123c" }, "downloads": -1, "filename": "oy-0.1.4.tar.gz", "has_sig": false, "md5_digest": "f29f0184995d7c91db50c2b29c032553", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1936827, "upload_time": "2019-02-13T12:35:37", "url": "https://files.pythonhosted.org/packages/e9/e7/50a034e46482e869791c7203407acaf75bc6f0b3f69248993b54b731ee40/oy-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "2351f6081ecac26b44163b507c8a4e0e", "sha256": "da186f811a0a7e990aec144ac9fd74d1fbddec83f8ae33d1776baf17c8c98497" }, "downloads": -1, "filename": "oy-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "2351f6081ecac26b44163b507c8a4e0e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2734604, "upload_time": "2019-02-23T23:16:25", "url": "https://files.pythonhosted.org/packages/7c/7a/14aef6faffa0c319d36195201dfca822a09dc46766428208d3315157dfbb/oy-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a36bea2a0bf0f2f8530d3094d8045063", "sha256": "2a30373b0de0ec9975ba842f31ab3f2de761f392163c7f9a0b97fe2f21bfb18b" }, "downloads": -1, "filename": "oy-0.1.5.tar.gz", "has_sig": false, "md5_digest": "a36bea2a0bf0f2f8530d3094d8045063", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2598816, "upload_time": "2019-02-23T23:19:29", "url": "https://files.pythonhosted.org/packages/b0/88/711e26c2e779eae7e9d0d0c162f6015b6511f0326d093d27a1d6e8899e36/oy-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "b3bb02a44180d5c461d9a9e30e65d9e1", "sha256": "232d8bd64d3cd09410becade013eb68b4aa2837b5fdf057927c22f1736cc31e1" }, "downloads": -1, "filename": "oy-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "b3bb02a44180d5c461d9a9e30e65d9e1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2758482, "upload_time": "2019-03-07T11:50:38", "url": "https://files.pythonhosted.org/packages/fa/0d/a4706eebb8b2c2683064034154076b82c8d28cbb5c54e946456ed3e069b1/oy-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7380e5e6ca92d1346cda058f045bf268", "sha256": "73a5eb4d7cd91d160d0a40723b535b8e4f2a3e8e0df0a75c63c738600107391a" }, "downloads": -1, "filename": "oy-0.1.6.tar.gz", "has_sig": false, "md5_digest": "7380e5e6ca92d1346cda058f045bf268", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2617288, "upload_time": "2019-03-07T11:50:46", "url": "https://files.pythonhosted.org/packages/88/a6/acde055427be70550bd0ba35cecd0f9c63875b93c49b51e57eb8277c42ca/oy-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "a674f24ac8f912973c94d10c28a3847b", "sha256": "95d766f03aff2beb4f447c5c465e402603b5c867959106ea878f03bb4b2cba28" }, "downloads": -1, "filename": "oy-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "a674f24ac8f912973c94d10c28a3847b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2758565, "upload_time": "2019-03-07T12:20:54", "url": "https://files.pythonhosted.org/packages/47/91/27b5d272d06872993e670d3f601028703987d267e8f0029c2eb7c441d1c1/oy-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b90ad333def80c225c12d59c37a9de3", "sha256": "9e38afd403cd5b471ff99adf27753e30997289514147d2ac3511fe46ca47683d" }, "downloads": -1, "filename": "oy-0.1.7.tar.gz", "has_sig": false, "md5_digest": "0b90ad333def80c225c12d59c37a9de3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2617508, "upload_time": "2019-03-07T12:20:59", "url": "https://files.pythonhosted.org/packages/d3/dd/b5eda04dac66429befb53936535387104a8ef4079d23b9d2522fdbb16495/oy-0.1.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a674f24ac8f912973c94d10c28a3847b", "sha256": "95d766f03aff2beb4f447c5c465e402603b5c867959106ea878f03bb4b2cba28" }, "downloads": -1, "filename": "oy-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "a674f24ac8f912973c94d10c28a3847b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 2758565, "upload_time": "2019-03-07T12:20:54", "url": "https://files.pythonhosted.org/packages/47/91/27b5d272d06872993e670d3f601028703987d267e8f0029c2eb7c441d1c1/oy-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b90ad333def80c225c12d59c37a9de3", "sha256": "9e38afd403cd5b471ff99adf27753e30997289514147d2ac3511fe46ca47683d" }, "downloads": -1, "filename": "oy-0.1.7.tar.gz", "has_sig": false, "md5_digest": "0b90ad333def80c225c12d59c37a9de3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2617508, "upload_time": "2019-03-07T12:20:59", "url": "https://files.pythonhosted.org/packages/d3/dd/b5eda04dac66429befb53936535387104a8ef4079d23b9d2522fdbb16495/oy-0.1.7.tar.gz" } ] }