{ "info": { "author": "Paul Winkler (for OpenPlans)", "author_email": "ebcode@groups.google.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: POSIX", "Programming Language :: Python :: 2", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: News/Diary", "Topic :: Internet :: WWW/HTTP :: Indexing/Search" ], "description": "=====\nebpub\n=====\n\nA Django application that provides hyperlocal news.\n\nThis package is part of OpenBlock. Originally developed for EveryBlock.com.\n\nFor more information, see the\n`documentation `_\nor the `project website `_.\n\nProblems can be reported to the `issue tracker `_.\n\nDiscussion is on the `ebcode google group `_\nor the #openblock channel on freenode.\n\nLicensed under the GNU General Public License version 3, except where\notherwise noted.\n\n\nInstallation\n============\n\nDo *not* just try to easy_install or pip install ebpub. It has a lot\nof specific dependencies which can't/shouldn't be captured by\nsetup.py.\n\nInstead, see the full documentation at http://openblockproject.org/docs/install/index.html which includes links to pip requirements files\nand instructions on preparing your system.\n\n\n=========\nOpenBlock\n=========\n\nOpenBlock is a web application and RESTful service that allows users\nto browse and search their local area for \"hyper-local news\" - to see\nwhat's going on recently in the immediate geographic area.\n\nFor installation instructions and other documentation, see\nhttp://openblockproject.org/docs/ (or the .rst files in the docs/ directory).\n\nFor help, you can try the ebcode group:\nhttp://groups.google.com/group/ebcode\nor look for us in the #openblock IRC channel on irc.freenode.net.\n\n\nAbout the Project\n=================\n\nOpenBlock began life as the open-source code released by\nEveryblock.com in June 2009. Originally created by Adrian Holovaty\nand the Everyblock team, it is now developed as an open-source (GPL)\nproject by OpenPlans, at http://openblockproject.org.\n\nFunding for the initial creation of Everyblock and the ongoing\ndevelopment of OpenBlock has been provided by the Knight Foundation\n(http://www.knightfoundation.org/).\n\n\nOpenBlock 1.2.0 (Released 5/23/2012)\n====================================\n\n.. _release-upgrade:\n\nUpgrade Notes\n-------------\n\n* As usual, install all dependencies, eg if you are upgrading a source checkout::\n\n pip install -r ebpub/requirements.txt\n pip install -e ebpub\n pip install -r ebdata/requirements.txt\n pip install -e ebdata\n pip install -r obadmin/requirements.txt\n pip install -e obadmin\n pip install -r obdemo/requirements.txt\n pip install -e obdemo\n\n* As usual, sync and migrate the database::\n\n django-admin.py syncdb\n django-admin.py migrate\n\n* In this release, there are some changes to the Block model and the\n import script, which combine to give you better search results and\n geocoding if you reload your blocks data. To do so:\n\n * Run migrations, as described above\n * Shut down your scrapers\n * Back up your database\n * Re-import blocks **with the --reset option** (that's important!), via either\n the admin UI or the command line ... see http://openblockproject.org/docs/install/geodata.html#streets-blocks\n * Be sure to also regenerate the Streets, BlockIntersections, and\n Intersections as per the docs.\n * Browse your site... everything should work except that streets\n with previously cryptic names like \"99\" or \"87\" will now have a\n more recognizable full name, eg. \"State Route 99\" or \"Interstate\n 87\".\n * Start your scrapers again.\n\n The website should remain operational during this process, though\n some pages may briefly give errors during the process, and URLs for\n highways will change to include the prefix.\n\n.. _backward-incompatibilities:\n\nBackward Incompatibilities\n--------------------------\n\n* Removed foreign keys EmailAlert.block and SavedPlace.block; instead\n they now have geometries which can be used to find a nearest block.\n This makes it safer to re-load your blocks data if you need\n to. Running migrations will take care of existing alerts and saved\n places, but you can't safely downgrade if you change your mind; make\n database backups as always! (Ticket #257)\n\n* Removed mystery fields Schema.grab_bag, Schema.grab_bag_headline,\n Schema.intro. (Ticket #232)\n\n* Removed safe_id_sort_reversed template tag; use the for loop's\n reverse option instead, eg.\n {% for item in itemlist|safe_id_sort reversed %}\n\n* Moved the friendlydate template filter from ebpub.db.templatetags.eb\n into ebpub.db.templatetags.dateutils, where it seems to belong.\n\n* Moved the recaptcha template tag from ebpub.neighbornews.templatetags into\n ebpub.db.templatetags.recaptcha_tags.\n Templates using it will now need to do {% load recaptcha_tags %}.\n\n* Moved one obscure template tag, {% get_locations_for_item %},\n from ebpub.widgets.templatetags into ebpub.db.templatetags.recaptcha_tags.\n Templates using it will now need to do {% load eb %}.\n\n* Renamed a bunch of template tag functions to match the name of the\n tag, eg. \"do_filter_url()\" is now \"filter_url()\". This makes the\n API docs easier to read; it doesn't affect templates, only code that\n imports those functions directly - and there problably is none of\n that.\n\n* Added a \"View selected items on map\" link and checkboxes on Schema\n filter pages, to allow viewing explicitly selected items on the \"big map\".\n\n* Changed URLs used by the schema_filter view, so some bookmarks may\n break. (Ticket # 266)\n\n* Removed the EB_MEDIA_ROOT and EB_MEDIA_URL settings; now use\n django's normal MEDIA_ROOT and MEDIA_URL instead.\n\n* Removed the ``ImproperCity`` exception, which only served to prevent\n using blocks in places such as unincorporated parts of counties,\n where there is nothing that could be called a 'city'.\n\n* Removed unused NewsItem.block field, part of ticket #93.\n\n* Removed ebdata/retrieval/scrapers/new_newsitem_list_detail.py,\n which wasn't used anywhere.\n\n* Removed ebpub/streets/blockimport/tiger/import_blocks2010.py.\n Census 2010 files are now supported by the main import_blocks.py\n script.\n\n* Removed item.intersecting from Widgets context; it was never\n documented properly. Instead use the new ``get_locations_for_item``\n template tag.\n\n* Removed the old map javascript since we're now using\n openblockrichmap.js everywhere.\n\n\nNew Features in 1.2\n-------------------\n\n* You can now safely re-import blocks data. In fact, this is highly\n recommended, you'll get better geocoding results due to fixes for\n #264 and #278. Use the \"--reset\" option to \"import_blocks_tiger\".\n\n* Added ebpub.utils.geodjango:interpolate() function which\n finds the point on a linestring that's the given distance (or\n fraction) from the first point. (Adds dependency on Shapely,\n since otherwise this would require a database call.)\n\n* Added 'prefix' to the Streets models, used for things like \"State Hwy\" in the\n US census TIGER data; without it, we were getting geocoding failures,\n confusing/ambigous street names in the UI, etc. Closes #264.\n\n* Location import in admin UI now runs in background.\n\n* Admin UI now provides links to view various things (NewsItems,\n Locations, Blocks, Streets, LocationTypes) on the live site.\n\n* ``NewsItem`` now allows saving with an empty ``description.``;\n some things might really only have a title available.\n\n* Support multiple types of Yahoo maps, due to olwidget upgrade.\n\n* ebpub.geocoder.base.full_geocode() now has a convert_to_block\n argument, factored out from ebdata.retrieval. If True, this\n tries to disambiguate bad blocks on good streets by rounding down\n to the nearest block, eg. converting '299 Wabash St' to '200 block\n of Wabash St.' May help geocoding when eg. census data doesn't\n quite match reality.\n\n* Schemas now have an ``edit_window`` field, representing how long (in\n hours) users are allowed to edit their content after it's created. Used\n by the ``neighbornews`` forms.\n\n* Rest API: Allow searching by multiple types (schemas).\n\n* Added an admin UI for importing NewsItems from spreadsheets\n (currently only handles CSV and old-style Excel sheets; not .xslx)\n (Ticket #126)\n\n* Added a generic spreadsheet scraper in\n ``ebdata/scrapers/general/spreadsheet/retrieval.py``,\n (currently only handles CSV and old-style Excel sheets; not .xslx)\n (Ticket #274)\n\n* ``ebdata.scrapers.general.georss`` address-extraction fallback now\n looks in all tags that look like text.\n\n* Search form now searches Places too.\n\n* Neighbornews schemas now have chartable ``categories``.\n\n* Allow overriding the template for schema_filter view on a per-schema\n basis, by creating a template named db/schema_filter/.html\n\n* Nieghbornews schemas now have specific templates for the\n schema_filter view.\n\n* Added ``featured`` flag on ``ebpub.db.Lookup`` model, allowing admins\n to designate some Lookup values as \"special\", for use in\n eg. navigation. (#268)\n\n* Added a ``get_featured_lookups_by_schema`` template tag, puts into\n context a list of the \"special\" Lookup values for that schema. (#268)\n\n* Added ``Lookup.objects.get_featured_lookup_for_item(newsitem, attribute_key)``\n method to find out which \"featured\" Lookups a newsitem has for a\n given attribute.\n\n* Added a ``lookup_values_for_attribute`` template tag, dumps all\n values of a given db.attribute field as a JSON list.\n\n* Made schema_filter the default view of Schemas, ticket #272\n\n* Added ``ebpub.moderation`` app that allows users to flag NewsItems\n as spam or inappropriate, and an admin UI for it;\n see `moderation` for more.\n\n* Added ``Schema.allow_flagging`` boolean to toggle moderation\n flagging per schema. Allowed by default on the\n ``ebpub.neighbornews`` schemas.\n\n* User-uploaded images now supported for NewsItems, and enabled for\n the ``ebpub.neighbornews`` user-contributed content schemas.\n\n* Added new ``userlinks.html`` template so you can override the links\n at top right of the page.\n\n* Added a ``get_locations_for_item`` template tag, see `../main/widgets`\n for more.\n\n* Now works with Postgresql 9.1, ticket #262\n\n* Nicer map controls thanks to Frank Hebbert, ticket #225\n\n* Added advanced hook for filtering schemas based on arbitrary request\n data; implement this by assigning ``settings.SCHEMA_MANAGER_HOOK =\n 'some_module:some_function'``, where ``some_module.some_function`` takes\n arguments (``request, manager``) and returns a ``models.Manager`` instance\n whose query sets will return the allowed Schemas.\n\n* Add Vary headers to REST API responses, for more correct HTTP\n cache-ability.\n\n* Auto-complete categories on the \"neighbornews\" add/edit forms.\n\n* Optional ReCaptcha on the user-contributed (\"Neighbornews\") add/edit\n forms.\n\n* User-contributed content (\"neighbornews\") now has edit and delete forms.\n\n* Sensible defaults on most DateFields and DateTimeFields, can still\n be overridden.\n\n* Logout now redirects you to whatever page you were viewing.\n\n* Add a \"properties\" JSON field to the Profile model, for more\n flexible per-user metadata.\n\n* User admin UI now shows Profiles and API keys inline.\n\n* \"Sticky widgets\" aka \"pinned\" NewsItems in widgets: You can use the\n admin UI to make certain NewsItems stay visible in the widget\n permanently or until an expiration date that you set.\n\n* settings.NEIGHBORNEWS_USE_CAPTCHA can now be a string path to a\n function.\n\n* New NewsItem.objects.by_request() method for filtering based on\n eg. user privileges.\n\n* New get_schema_manager(request) method for filtering based on\n current request, with an extensibility hook too.\n\n* At least put the darn geocoder cache results in the admin so you can\n delete them manually if desired. Refs #163\n\n* Admin UI option to save a copy of a schema as a new schema.\n\n\nBugs fixed\n----------\n\n* Admin users no longer have a limit on file upload size.\n\n* Handle importing locations in other projections than 4326.\n Thanks Karen Tracey. Refs #214.\n\n* We now use the primary street name for blocks loaded from US census TIGER\n data, instead of whichever one we see last, which may be an alternate name.\n Issue #278\n\n* Location import (both command-line and admin UI) no longer blows up\n when re-importing the same Locations.\n\n* RSS feed URLs fixed to use settings.EB_DOMAIN rather than the sites\n framework for getting the root URL. For consistency with the rest\n of OpenBlock.\n\n* Street names properly normalized on input (ticket #166)\n\n* parsing.normalize() and text.slugify() no longer blow up if fed\n non-string input.\n\n* Schemas with allow_charting=False were shown on the schema_filter\n view, but not on its map. Fixed schema_filter_geojson so now they\n show up on map too.\n\n* Fix filtering by location and date on big map page.\n\n* Fix #281, wrong schemas shown on big map page.\n\n* Map icon URLs for db.Location and streets.PlaceType can now be\n relative to STATIC_URL\n\n* Fix #282, missing items on place detail pages\n\n* Fix KeyError when an Attribute references a non-existent Lookup.\n\n* Fix error on FilterChain.add(key, lookup) when key isn't a SchemaField.\n\n* Should be possible to run OpenBlock at a URL prefix now; removed all\n hardcoded URLs. Ticket #90.\n\n* Fix missing AJAX timeouts on \"save place\" button, thanks Tim Shedor.\n Ticket #269\n\n* Fix error in NewsItem.objects.by_attribute() with many-to-many\n lookups: looking for [3,47] was finding any number starting with 3\n or ending with 47.\n\n* Make ``manage.sh`` script executable.\n\n* Fix rare error when we have a Block instance but its block range\n doesn't match the block range regex. Known example: 1600-7-1600-9\n Hanover Blvd. in Columbia, MO.\n\n* Allow choosing multiple values when filtering via Lookups.\n Ticket # 267.\n\n* Use query params instead of weird URIs for schema_filter view,\n ticket # 266.\n\n* Remove bogus breadcrumbs from schema_filter page; ticket #270\n\n* Filtering NewsItems by Block no longer causes 500 error.\n\n* block_import_tiger can now be safely re-run on the same file,\n it won't create duplicate blocks anymore.\n\n* Fixed double-logging of scrapers to the console.\n\n* /streets/ list doesn't blow up if you haven't set\n DEFAULT_LOCTYPE_SLUG.\n\n* Workaround for getting profile when request.user is a LazyUser\n instance.\n\n* De-hardcoded more URLs.\n\n* When using a too-old python version, our setup.py scripts now give a\n more informative error, instead of SyntaxError due to a `with`\n statement.\n\n* Custom login view now works when going to admin site, and is\n compatible with (uses same cookies as) django.contrib.auth. Ticket\n #174\n\n* Logout form was broken by bad template name. Fixed.\n\n* Fix 500 error when user doesn't exist.\n\n* Don't barf constructing richmaps url if there are no matching\n newsitems\n\n* Group blocks by street on \"choose a block\" page, ticket # 263\n\n* Store suffixes on streets with names like 'Wilson Park'; fixes some\n geocoding failures.\n\n* Fix 500 error on newsitem.geojson, ticket #38\n\n\nDocumentation\n-------------\n\nToo many to mention, but here are some:\n\n* Python API documentation for all(?) of ebpub, ebdata, obadmin, obdemo packages.\n Ticket #159.\n\n* Better docs on how to import spreadsheets via scraper or admin.\n\n* Clarify behavior of email alerts.\n\n* Better docs on what the \"core\" NewsItem fields are.\n\n* Document ``ebpub.db.bin`` scripts. Ticket #96.\n\n* Documentation about comments and flagging of NewsItems. Ticket #252\n\n* Better docs about template overrides, see `custom-look-feel`.\n\n* Document ``ebpub.streets.Places``, see `places`. Ticket #253\n\n* Basic docs for ``ebpub.neighbornews``, see `user_content`.\n Ticket #211\n\n* Document how to get the 2010 census files instead of 2009.\n\n* Added docs on all the settings in settings_default.py.\n\n* Better documentation about Schemas, SchemaFields, Attributes, and how they relate.\n\n* Fixes to example crontab, thanks Tim Shedor\n\n\nOther\n-----\n\n* Factored out the georss scraper's point-parsing code into a\n ``get_point()`` function in ebdata.retrieval.utils.\n\n* Generic rss scraper is now the basis for\n ``obdemo.scrapers.add_news`` which did the same thing.\n\n* Generic rss scraper is now a ListDetailScraper and\n RssListDetailScraper subclass. Ticket #242\n\n* Upgrade jquery-ui to 1.8.17.\n\n* Upgrade jquery to 1.7.1.\n\n* Moved some NewsItemListDetailScraper functionality up into\n BaseScraper, so it's more widely usable.\n\n* Deprecate log_exception(), the logging module actually does that\n already\n\n* Move full_geocode() to ebpub.geocoder.base; it was in an obscure place\n\n* By default, one API key per user. 3 was kind of silly.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://openblockproject.org/docs", "keywords": "openblock", "license": "GPLv3", "maintainer": null, "maintainer_email": null, "name": "ebpub", "package_url": "https://pypi.org/project/ebpub/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/ebpub/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://openblockproject.org/docs" }, "release_url": "https://pypi.org/project/ebpub/1.2/", "requires_dist": null, "requires_python": null, "summary": "Core models and views for OpenBlock (hyperlocal news for Django)", "version": "1.2" }, "last_serial": 791529, "releases": { "1.0-beta1": [ { "comment_text": "", "digests": { "md5": "2551f368a239b8ea2e86c0dbdffeca3e", "sha256": "4a225d342ef540a52749efb7433848fcde37de5e3c54ea54aa1006a678153f58" }, "downloads": -1, "filename": "ebpub-1.0-beta1.tar.gz", "has_sig": false, "md5_digest": "2551f368a239b8ea2e86c0dbdffeca3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 893631, "upload_time": "2011-08-18T05:43:24", "url": "https://files.pythonhosted.org/packages/89/04/50f0c9454d47c8f8c386b44cf14d5f40443c9b2a7b12519dba12a87767d4/ebpub-1.0-beta1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "40fd882d212b71c8360344176f064f62", "sha256": "bdbf1dee0a5814b484ebe4a7954173c3f603b03728a22c2a56e76b7f231844af" }, "downloads": -1, "filename": "ebpub-1.0.0.tar.gz", "has_sig": false, "md5_digest": "40fd882d212b71c8360344176f064f62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 890589, "upload_time": "2011-08-31T06:23:42", "url": "https://files.pythonhosted.org/packages/fa/1f/5b38e3dc61019355565b03fdd0fe1dfa83d302b26abdc9145a7a4c660a6e/ebpub-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "e39d24ddd1a5e360530440e2fd81f78b", "sha256": "eb7aa215d3554faeef76fb4f8481c291600d963cc8ab1ce4ba67165cc6166e1c" }, "downloads": -1, "filename": "ebpub-1.0.1.tar.gz", "has_sig": false, "md5_digest": "e39d24ddd1a5e360530440e2fd81f78b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 887617, "upload_time": "2011-09-07T18:41:24", "url": "https://files.pythonhosted.org/packages/4d/16/7cafa8741003f4fed8e7a75eb0c27ec738d94065ba3617b3ac48f8e10c03/ebpub-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "1425400c73d791b3f1a37dd5f326dac5", "sha256": "ffd9c22e3c61be1a72b0851bfce58af75ed62fcd0d1c46f29489f143fb26c5e1" }, "downloads": -1, "filename": "ebpub-1.1.0.tar.gz", "has_sig": false, "md5_digest": "1425400c73d791b3f1a37dd5f326dac5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 950759, "upload_time": "2011-10-20T16:45:44", "url": "https://files.pythonhosted.org/packages/ac/16/02ceb79e9627dfcc15a19081453d223443d09da8b6102a97554e7fd78b6f/ebpub-1.1.0.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "198927493b5db807fb4ac092f6b411eb", "sha256": "222d55af33cc7130dce63ee0e85c36b7c8aa1890cad5e4e6cb38c5d44060e8ea" }, "downloads": -1, "filename": "ebpub-1.2.tar.gz", "has_sig": false, "md5_digest": "198927493b5db807fb4ac092f6b411eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1116325, "upload_time": "2012-05-24T19:24:19", "url": "https://files.pythonhosted.org/packages/7b/4a/ea353641a76eb7ac39d6898582bbf8177e837ce84ff2ca0ec75e5ee1235c/ebpub-1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "198927493b5db807fb4ac092f6b411eb", "sha256": "222d55af33cc7130dce63ee0e85c36b7c8aa1890cad5e4e6cb38c5d44060e8ea" }, "downloads": -1, "filename": "ebpub-1.2.tar.gz", "has_sig": false, "md5_digest": "198927493b5db807fb4ac092f6b411eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1116325, "upload_time": "2012-05-24T19:24:19", "url": "https://files.pythonhosted.org/packages/7b/4a/ea353641a76eb7ac39d6898582bbf8177e837ce84ff2ca0ec75e5ee1235c/ebpub-1.2.tar.gz" } ] }