Giter Club home page Giter Club logo

pinry / pinry Goto Github PK

View Code? Open in Web Editor NEW
3.0K 118.0 349.0 11.94 MB

Pinry, a tiling image board system for people who want to save, tag, and share images, videos and webpages in an easy to skim through format. It's open-source and self-hosted.

Home Page: https://docs.getpinry.com

License: BSD 2-Clause "Simplified" License

Python 41.07% JavaScript 12.50% HTML 0.34% Dockerfile 0.14% Makefile 0.69% Shell 3.12% Vue 40.82% SCSS 1.32%
python django node vue pinterest images self-hosted huaban

pinry's Introduction

Pinry

Node.js Build Python Build Docker Pulls

The open-source core of Pinry, a tiling image board system for people who want to save, tag, and share images, videos and webpages in an easy to skim through format.

For more information ( screenshots and document ) visit getpinry.com.

Features

  • Image fetch and online preview
  • Tagging system for Pins
  • Browser Extensions
  • Multi-user support
  • Works well with docker
  • Both public and private boards (add @2020.02.11)
  • Search by tags / Search boards with name (add @2020.02.14)
  • Full API support via DRF (add @2022.02.19)
  • CLI support (Add image or url to Pinry via command-line tool) (add @2022.02.20)
  • i18n support (if you want to help to translate, please contact us in issues) (add @2020.04.23)
    • English
    • 简体中文
    • French Support by Lilian

Preview

image

Install with Docker

Now we have pre-built docker image on multiple architectures like ARMv7/ARMv8/AMD64.

See our full documentation at https://docs.getpinry.com/install-with-docker/

Requirements

See our full documentation at https://docs.getpinry.com/development/

Development

See our full documentation at https://docs.getpinry.com/development/

Contributors

The core contributors for Pinry have been/currently are:

For a full list of contributors check out the GitHub Contributors Graph

pinry's People

Contributors

2n3906 avatar chrisdecker1201 avatar cleaverm avatar dependabot[bot] avatar dextor19 avatar dunn avatar gissehel avatar jensgutermuth avatar jjasonkal avatar kerenon avatar kklimonda avatar lapo-luchini avatar lilianboulard avatar mbaz avatar mwcz avatar nickali avatar norweeg avatar overshard avatar piotr12 avatar qweryty avatar razzius avatar rousong avatar rtau avatar sartoshi-foot-dao avatar timgates42 avatar tomwys avatar tsmsogn avatar tylerstalder avatar willstott101 avatar winkidney 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  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

pinry's Issues

Database Error

Hi,

after a failure while uploading a picture and retrying, pinry returns following errormessage:

{
    "error_message": "get() returned more than one Thumbnail -- it returned 2! Lookup parameters were {'size': 'thumbnail'}",
    "traceback": "Traceback (most recent call last):\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/resources.py\", line 202, in wrapper\n response = callback(request, *args, **kwargs)\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/resources.py\", line 439, in dispatch_list\n return self.dispatch('list', request, **kwargs)\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/resources.py\", line 471, in dispatch\n response = method(request, **kwargs)\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/resources.py\", line 1270, in get_list\n bundles.append(self.full_dehydrate(bundle))\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/resources.py\", line 837, in full_dehydrate\n bundle.data[field_name] = field_object.dehydrate(bundle)\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/fields.py\", line 729, in dehydrate\n return self.dehydrate_related(fk_bundle, self.fk_resource)\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/fields.py\", line 565, in dehydrate_related\n return related_resource.full_dehydrate(bundle)\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/resources.py\", line 837, in full_dehydrate\n bundle.data[field_name] = field_object.dehydrate(bundle)\n\n File \"/home/XXX/lib/python2.7/django_tastypie-0.9.12-py2.7.egg/tastypie/fields.py\", line 719, in dehydrate\n foreign_obj = self.attribute(bundle)\n\n File \"/home/XXX/pinry/pinry/core/api.py\", line 79, in <lambda>\n attribute=lambda bundle: filter_generator_for('thumbnail')(bundle))\n\n File \"/home/XXX/pinry/pinry/core/api.py\", line 62, in wrapped_func\n return Thumbnail.objects.get_or_create_at_size(bundle.obj.pk, size, **kwargs)\n\n File \"/home/XXX/lib/python2.7/django_images-2013.1-py2.7.egg/django_images/models.py\", line 64, in get_or_create_at_size\n thumbnail = image.get_by_size(size)\n\n File \"/home/XXX/lib/python2.7/django_images-2013.1-py2.7.egg/django_images/models.py\", line 43, in get_by_size\n return self.thumbnail_set.get(size=size)\n\n File \"/home/XXX/lib/python2.7/Django-1.5-py2.7.egg/django/db/models/manager.py\", line 143, in get\n return self.get_query_set().get(*args, **kwargs)\n\n File \"/home/XXX/lib/python2.7/Django-1.5-py2.7.egg/django/db/models/query.py\", line 405, in get\n (self.model._meta.object_name, num, kwargs))\n\nMultipleObjectsReturned: get() returned more than one Thumbnail -- it returned 2! Lookup parameters were {'size': 'thumbnail'}\n"
}

cannot instal on a shared hosting?

"you will not be able to work as root," said the site5 support theme, further elaborating:

While working via SSH on a shared account you will be able to install the version of Python that you need and the version of Django that is required. Sure, you should be able to install other modules and tools as long as no root access is required(and it should not be required).

Is there a workaround?

Allow connecting to external Pinry boards

Allow users to create linked boards on their dashboard, you input board URL, it "registers" with the external board (asking permissions, users can deny permissions), and then the external board will push new updates to the registered boards. Also need a way for users to maybe login to external boards if the board allows it?

Update pypi

Current version of Pinry is 1.3.0, current on PyPi is 1.1.0. Also in setup.py we need to change a classifier from "Development Status :: 4 - Beta", to whatever production ready is.

extract_prefix bug

As of the latest version of factory_boy, "extract_prefix" is no longer a keyword argument to PostGenerationHook and therefore will cause pinry to error:

TypeError: post_generation() got an unexpected keyword argument 'extract_prefix'

Private Pin / Private Board

Hi,

My "gallery" is public and share with family and friends, but there are some pin I don't want to share. For example, in this christmas period I want to pin some presents ideas and don't want my wife or kids see them.

It could be a checkbox on pin formulaire, or maybe a tag 'private' to add manually...

Thank you.

Error on install on webfaction / django 1.5.2

I use the master version of pinry on webfaction.

I install dependencies with requierements.txt, but i have this error :

[Tue Aug 27 13:59:16 2013] [error] [client 127.0.0.1] mod_wsgi (pid=1644): Exception occurred processing WSGI script '/home/reyman64/webapps/pinry/pinry/wsgi.py'.
...
[Tue Aug 27 13:59:16 2013] [error] [client 127.0.0.1] File "/home/reyman64/lib/python2.7/django/conf/init.py", line 152, in init
[Tue Aug 27 13:59:16 2013] [error] [client 127.0.0.1] raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
[Tue Aug 27 13:59:16 2013] [error] [client 127.0.0.1] ImproperlyConfigured: The SECRET_KEY setting must not be empty.

It's a problem with django version like google say ?

My pip freeze on virtualenv :

Django==1.5.2
MySQL-python==1.2.3
PIL==1.1.7
Pillow==2.1.0
South==0.8.2
django-appconf==0.6
django-braces==1.2.2
django-compressor==1.3
django-images==0.3
django-taggit==0.9.3
django-tastypie==0.9.12
docutils==0.7
egenix-mx-base==3.1.3
factory-boy==1.3.0
mimeparse==0.1.3
mock==1.0.1
numpy==1.5.0
psycopg2==2.3.2
pycrypto==2.3
pysqlite==2.6.3
python-dateutil==2.1
reportlab==2.4
requests==1.2.3
simplejson==3.1.0
six==1.3.0
stevedore==0.10
virtualenv==1.10.1
virtualenv-clone==0.2.4
virtualenvwrapper==4.1.1
wsgiref==0.1.2

Thanks

Vertical scrollbar disappear

Hi,

On long page, the vertical scrollbar disappear after edit or add a pin.

A refresh make it reappear.

Thank you.

Deprecation Issue

After installing via virtualenv on a mac using the requirements file, with no edits, for a development environment, all installs ok, server runs, but get an error "problem saving image" when trying to pin and the following in terminal:

...virtualenvs/pinry/lib/python2.7/site-packages/django/http/request.py:193: DeprecationWarning: HttpRequest.raw_post_data has been deprecated. Use HttpRequest.body instead.
warnings.warn('HttpRequest.raw_post_data has been deprecated. Use HttpRequest.body instead.', DeprecationWarning)

Getting this on both the master version and v.1.3.2

Not sure if it is that I am installing incorrectly, or a real issue.

Supply RSS feed

Better if it is per user and tag. This would easily allow interaction with other systems.

installing in webfaction

can you help or guide me install ?
I am not clear about virtualenv
first what I did is installing PIL and PostgreSQl on src
base on these link:
https://jamiecurle.co.uk/blog/webfaction-installing-pil/
http://stackoverflow.com/questions/5394331/how-to-setup-postgresql-database-in-django

and then I follow the short instruction on installation pinry which is:?
virtualenv .
bin/pip install -r requirements.txt

and I run python manage.py syncdb
I set everything to production so I configure database in postgresql

Did I missing anything? seems like database is not installing?

Please I need your guide

api returning 401 errors while non-super users try to create new pin

installed pinry without any modifications .
when i login with a regular user account , and try to create a new pin. i get error creating image error at front end .
the console shows
POST /api/v1/pin/ HTTP/1.1" 401 0

am new to python and django .but i tried editing api.py
and replace the authorization = PinryAuthorization()

with authorization = Authorization
after importing from tastypie.authorization import Authorization

but think this will break the authorization checks for edit and delete requests.

Website URL Pins

Grabs a screenshot using phantomjs for the tile, need's to install phantomjs using setup.py, there are binaries that are easy to install.

Remove the extra sub-folder `by-md5`

It seems completely useless to have this sub-folder for media images that were pinned, and I'm labeling as a bug simply because it really shouldn't exist.

Link options carry over to new file.

Aka adding http://i.imgur.com/BCSW7wz.jpg?1 carries over the ?1 as a -1 muddying up the end url /media/8/e/8e3d6f695a08430602a4168a6f306d2c/BCSW7wz.jpg%3F1.

error when self test ' python manage.py test'

Hi ,
I am not sure if it is ok to post anything here or not .if it is not allowed please ignore this or delete this .
I am getting windows 123 error when doing self testing . I am using sqlite3 database.
If I do 'python manage runserver' then I can login but cannot upload any picture .

The errors are like below:

ERROR: test_put_detail_unauthorized (pinry.core.tests.api.PinResourceTest)

Traceback (most recent call last):
File "C:\Python27\djcode\pinry-master\pinry\core\tests\api.py", line 148, in test_put_detail_unaut
horized
uri = '/api/v1/pin/{}/'.format(PinFactory(submitter=self.user).pk)
File "C:\Python27\lib\site-packages\factory\base.py", line 77, in call
return cls.create(**kwargs)
File "C:\Python27\lib\site-packages\factory\base.py", line 647, in create
attrs = cls.attributes(create=True, extra=kwargs)
File "C:\Python27\lib\site-packages\factory\base.py", line 314, in attributes
return containers.AttributeBuilder(cls, extra).build(create)
File "C:\Python27\lib\site-packages\factory\containers.py", line 274, in build
return stub.fill()
File "C:\Python27\lib\site-packages\factory\containers.py", line 75, in fill
res[attr] = getattr(self, attr)
File "C:\Python27\lib\site-packages\factory\containers.py", line 94, in getattr
val = val.evaluate(self, self.__containers)
File "C:\Python27\lib\site-packages\factory\containers.py", line 196, in evaluate
expanded_containers)
File "C:\Python27\lib\site-packages\factory\declarations.py", line 279, in evaluate
return self.generate(create, defaults)
File "C:\Python27\lib\site-packages\factory\declarations.py", line 338, in generate
return subfactory.create(**params)
File "C:\Python27\lib\site-packages\factory\base.py", line 648, in create
return cls._generate(True, attrs)
File "C:\Python27\lib\site-packages\factory\base.py", line 617, in _generate
obj = cls._prepare(create, **attrs)
File "C:\Python27\lib\site-packages\factory\base.py", line 593, in _prepare
return creation_function(target_class, _args, _kwargs)
File "C:\Python27\lib\site-packages\factory\base.py", line 41, in DJANGO_CREATION
return class_to_create.objects.create(**kwargs)
File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 149, in create
return self.get_query_set().create(
_kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 414, in create
obj.save(force_insert=True, using=self.db)
File "C:\Python27\lib\site-packages\django\db\models\base.py", line 546, in save
force_update=force_update, update_fields=update_fields)
File "C:\Python27\lib\site-packages\django\db\models\base.py", line 591, in save_base
update_fields=update_fields)
File "C:\Python27\lib\site-packages\django\db\models\base.py", line 650, in save_base
result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 215, in _insert
return insert_query(self.model, objs, fields, *_kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 1673, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 936, in execute_sql
for sql, params in self.as_sql():
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 894, in as_sql
for obj in self.query.objs
File "C:\Python27\lib\site-packages\django\db\models\fields\files.py", line 250, in pre_save
file.save(file.name, file, save=False)
File "C:\Python27\lib\site-packages\django\db\models\fields\files.py", line 86, in save
self.name = self.storage.save(name, content)
File "C:\Python27\lib\site-packages\django\core\files\storage.py", line 48, in save
name = self._save(name, content)
File "C:\Python27\lib\site-packages\django\core\files\storage.py", line 171, in _save
os.makedirs(directory)
File "C:\Python27\lib\os.py", line 150, in makedirs
makedirs(head, mode)
File "C:\Python27\lib\os.py", line 150, in makedirs
makedirs(head, mode)
File "C:\Python27\lib\os.py", line 150, in makedirs
makedirs(head, mode)
File "C:\Python27\lib\os.py", line 157, in makedirs
mkdir(name, mode)
WindowsError: [Error 123] The filename, directory name, or volume
label syntax is incorrect
。: u'C:\Python27\djcode\pinry-master\media\image\original\by-md5\6\5\658e8dc0bf8b9a09b369
94abf9242099\C:'

ERROR: test_has_perm_on_pin (pinry.users.tests.CombinedAuthBackendTest)

Traceback (most recent call last):
File "C:\Python27\lib\site-packages\mock.py", line 1201, in patched
return func(_args, _keywargs)
File "C:\Python27\djcode\pinry-master\pinry\users\tests.py", line 39, in test_has_perm_on_pin
image = Image.objects.create_for_url('http://testserver/mocked/screenshot.png')
File "C:\Python27\djcode\pinry-master\pinry\core\models.py", line 22, in create_for_url
return Image.objects.create(image=obj)
File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 149, in create
return self.get_query_set().create(
_kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 414, in create
obj.save(force_insert=True, using=self.db)
File "C:\Python27\lib\site-packages\django\db\models\base.py", line 546, in save
force_update=force_update, update_fields=update_fields)
File "C:\Python27\lib\site-packages\django\db\models\base.py", line 591, in save_base
update_fields=update_fields)
File "C:\Python27\lib\site-packages\django\db\models\base.py", line 650, in save_base
result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 215, in _insert
return insert_query(self.model, objs, fields, *_kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 1673, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 936, in execute_sql
for sql, params in self.as_sql():
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 894, in as_sql
for obj in self.query.objs
File "C:\Python27\lib\site-packages\django\db\models\fields\files.py", line 250, in pre_save
file.save(file.name, file, save=False)
File "C:\Python27\lib\site-packages\django\db\models\fields\files.py", line 87, in save
setattr(self.instance, self.field.name, self.name)
File "C:\Python27\lib\site-packages\django\db\models\fields\files.py", line 309, in set
self.field.update_dimension_fields(instance, force=True)
File "C:\Python27\lib\site-packages\django\db\models\fields\files.py", line 379, in update_dimensi
on_fields
width = file.width
File "C:\Python27\lib\site-packages\django\core\files\images.py", line 15, in _get_width
return self._get_image_dimensions()[0]
TypeError: 'NoneType' object has no attribute 'getitem'

Instructions for mod_wsgi

Some instructions of how to use Pinry with mod_wsgi would be fantastic, specifically for people who are interested in learning Django but coming from PHP. I presume it is possible to do? If so, instructions would be very much appreciated.

Bookmarklet adds jQuery but stills breaks on the first click.

Sites that don't have jQuery require the bookmarklet to be clicked twice. The first time adds jQuery to the page, but $(document).ready fails to bind because adding script tags to a page is an async operation. The second click of the bookmarklet passes the jQuery check and successfully binds because this time the ready bind is successful.

Vimeo and Youtube pinning support

The core social video sites for now since they both have easy embeddables. Need to grab a "screenshot" of the video, can be done via the API I think, to put as the pin thumbnail.

500 error pinning a photo

In the console log it says:

"POST /api/v1/pin/ HTTP/1.1" 500 2652 

Is it something I'm missing? I've tried both master and v1.3.2

Like and share buttons on individual items.

Is it possible to add like and share to social? will this be easy to implement? is there any apps that I can install to support this? It doesn't have to be login. they can just click like and show the number of like and show the number of share

Create board system

Boards should have user based permissions, board admin, board posters etc...

How does Bookmarklet works?

Installed pinry on nginx server today. Everything went smooth. Posting new pins no problem, but when I click on bookmarklet I only get dark darker transparent background.
I would be gratefull for any help and thanks for greate piece of software
pinry

error 500 after install on webfaction

Hi,
Sorry another question about installation, not easy for beginner in django world.

i have no error on my apache2 log but a 500 error on homepage / register page / login page :

http://pic.squirrelartblog.fr/

My directory folder on webfaction is :

.
|-- apache2
|   |-- bin
|   |-- conf
|   |-- httpd_backup.conf
|   |-- lib
|   |-- logs
|   `-- modules
|-- htdocs
|   `-- index.py
`-- pinry
    |-- CONTRIBUTORS
    |-- LICENSE
    |-- README.md
    |-- backup.py
    |-- bin
    |-- bootstrap.py
    |-- buildout.cfg
    |-- include
    |-- lib
    |-- logo.png
    |-- manage.py
    |-- media
    |-- pinry
    |-- requirements.txt
    |-- setup.py
    |-- static
    `-- wsgi.py

THe wsgi.py equal =

import os,sys,site

site.addsitedir('/home/reyman64/.virtualenvs/pinry/lib/python2.7/site-packages')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pinry.settings.production")

activate_this = os.path.expanduser("~/.virtualenvs/pinry/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))

project = '/home/reyman64/webapps/pinry/pinry/'
workspace = os.path.dirname(project)
sys.path.append(workspace)

sys.path = ['/home/reyman64/webapps/pinry/pinry',
'/home/reyman64/webapps/pinry/pinry/apps',
'/home/reyman64/webapps/pinry'] + sys.path

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

Handle image redirects server-side

Some sites redirect when trying to download an image. Try to follow redirect to real image, if you can't pick up a real image provide an error that the site is "blocking" you.

Use requests to implement this since requests is awesome.

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.