Davide Muzzarelli » python /blog L'informatica a valore aggiunto Mon, 25 May 2015 22:41:52 +0000 en hourly 1 http://wordpress.org/?v=3.3.2 Two template filters for Django /blog/2012/01/two-template-filters-for-django/ /blog/2012/01/two-template-filters-for-django/#comments Fri, 20 Jan 2012 11:46:23 +0000 Davide Muzzarelli /blog/?p=254 I want to signal two new template filters for Django.

Precise truncate words by chars

It truncates the text when it exceeds a certain number of characters and deletes the last word. Adds ‘…’ at the end of the text, only if truncated.

The difference between other similar filters is that this deletes the last word only if partial, so it is more precise and pleasant.

The snippet is here.

Divide a list into exact columns

It divides a list into an exact number of columns.

The difference between other similar filters it that the number of columns is guaranteed, even if there are not enough elements to fill all the columns.

The snippet is here.

]]>
/blog/2012/01/two-template-filters-for-django/feed/ 0
Python client for the Nirvanix API /blog/2008/07/python-client-for-the-nirvanix-api/ /blog/2008/07/python-client-for-the-nirvanix-api/#comments Tue, 29 Jul 2008 20:46:00 +0000 Davide Muzzarelli /blog/2008/07/python-client-for-the-nirvanix-api/ I released a Python client for Nirvanix.

The project page is:
https://www.hosted-projects.com/trac/Design/pub/wiki/Nirvanapi

It include the most important API calls, is light (one file and less of 400 lines of code) and have not dependences.

The client support right now the following API calls:

LoginLogoutCreateFoldersDeleteFoldersDeleteFilesCopyFilesCopyFoldersMoveFilesMoveFoldersRenameFileRenameFolderSideuploadListFolderCreateHostedItemExtractFrames

The login is automatic also when the connection drop.

List a directory into Nirvanix in a little example:

from nirvanapi import NirvanixClientnc = NirvanixClient('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', 'username', 'password')print nc.list_folder('/')
]]>
/blog/2008/07/python-client-for-the-nirvanix-api/feed/ 0
Backpack Update – Aggiornamento per Backpack /blog/2007/07/backpack-update-aggiornamento-per-backpack/ /blog/2007/07/backpack-update-aggiornamento-per-backpack/#comments Wed, 25 Jul 2007 20:52:00 +0000 Davide Muzzarelli /blog/2007/07/backpack-update-aggiornamento-per-backpack/ Since few hours Backpack has been updated and it is avaiable the new API that correct various problematic that plagued it.
The Python client that I have wrote will be updated too and published soon.

The new features will be:
- multi list management;
- all objects of the pages can now be ordered;
- the old page descriptions are now notes;
- page links have been deprecated;
- search function;
- separators;
- the tags bug could be now resolved.

Some problems still seem not to have benn taken in consideration, like the export of filed and images. Together with others developers we are making pressure in order to have the possibility to manage them through API, but 37signals still does not answer to our demands.

Backpack: Get Organized and Collaborate

Da poche ore è stato aggiornato Backpack ed è disponibile la nuova API che corregge diverse problematiche che lo affliggevano.
Il client per Python che ho preparato sarà presto aggiornato e pubblicato.

Le nuove funzionalità saranno:
- gestione di più liste;
- posizionamento degli oggetti nella pagina;
- la descrizione delle pagine è ora diventata una nota come le altre;
- i link tra le pagine sono ora deprecati;
- funzione di ricerca;
- separatori;
- il bug dei tag ora dovrebbe essere risolto.

Alcuni problemi sembrano non essere ancora stati presi in considerazione, come l’esportazione di immagini e file. Assieme ad altri sviluppatori stiamo facendo pressione per avere la possibilità di gestirli tramite API ma 37signals ancora non risponde alle nostre domande.

]]>
/blog/2007/07/backpack-update-aggiornamento-per-backpack/feed/ 0
Backpack Client for Python /blog/2007/07/backpack-client-for-python/ /blog/2007/07/backpack-client-for-python/#comments Tue, 24 Jul 2007 14:46:00 +0000 Davide Muzzarelli /blog/2007/07/backpack-client-for-python/ A Backpack client API for Python will be released soon.

Ready features:
- API interface and object interface;
- creation and updating of Backpack objects with a single save method;
- objects avaiables: pages, notes, items, tags but also lists!
- page linking;
- page sending via email;
- support for SSL (not tested).

Next features:
- data exporting;
- emails;
- reminders;
- page sharing.

Because of some Backpack bugs and mistakes some features are not yet ready and I prefer to wait for the first release.

Stay tuned!

Backpack: Get Organized and Collaborate

Il client Python per sfruttare l’API di Backpack verrà rilasciato presto.

Funzionalità già disponibili:
- interfaccia in stile API ed a oggetti;
- creazione e modifica degli oggetti di Backpack con un singolo metodo “save”;
- oggetti disponibili: pagine, note, appunti ma anche liste!
- link tra le pagine;
- spedizione delle pagine via email;
- supporto per SSL (non testato).

Prossime funzionalità:
- esportazione di tutte le pagine;
- email;
- promemoria;
- condivisione delle pagine.

A causa di alcune imprecisioni nella documentazione ed alcuni errori nell’API di Backpack alcune funzionalità non sono ancora pronte per cui ho preferito aspettare prima di pubblicare la prima release.

]]>
/blog/2007/07/backpack-client-for-python/feed/ 0
Preview di un testo con una sola riga di Python /blog/2007/06/preview-di-un-testo-con-una-sola-riga-di-python/ /blog/2007/06/preview-di-un-testo-con-una-sola-riga-di-python/#comments Sat, 09 Jun 2007 16:38:00 +0000 Davide Muzzarelli /blog/2007/06/preview-di-un-testo-con-una-sola-riga-di-python/ Nei siti web capita spesso di mostrare una preview di una news o di un articolo. Queste preview includono solo una parte del testo per poter elencare più articoli o news nella stessa pagina senza appesantire troppo la navigazione.

A tal proposito ecco una funzione di una sola riga che prende un testo, lo accorcia ed aggiunge i puntini di sospensione alla fine:

def extract_short_description(text, len=25): return ' '.join(text[:len].split()[:-1]) + '...'

text[:len]” prende il testo e lo taglia fino alla lunghezza massima indicata (in questo caso sono 25 caratteri di default).
.split()” divide il testo in singole parole creando una lista.
[:-1]” elimina l’ultima parola perché probabilmente è stata tagliata.
‘ ‘.join(…)” unisce le parole in una stringa immettendo uno spazio tra di esse.
Infine “+ ‘…’” aggiunge i puntini finali :)

Spesso ciò che in altri linguaggi è richiede diverse righe di codice Python lo esprime in poche pur mantenendo la leggibilità allo stesso livello.

]]>
/blog/2007/06/preview-di-un-testo-con-una-sola-riga-di-python/feed/ 2
Convertire l’HTML in HTML sicuro /blog/2006/11/convertire-lhtml-in-html-sicuro/ /blog/2006/11/convertire-lhtml-in-html-sicuro/#comments Thu, 30 Nov 2006 18:50:00 +0000 Davide Muzzarelli /blog/2006/11/convertire-lhtml-in-html-sicuro/ Scrivendo su di un blog tecnico capita spesso di aver codice da mostrare. In particolare, quando il suddetto codice proprio HTML bisogna provvedere a convertire alcuni caratteri perché altrimenti il browser, riconoscendolo, lo valuta.

In python sono sufficienti pochi comandi per effettuare la conversione:

# legge il file "from.txt" contenente il testo da convertiretext = file('from.txt', 'r').read()

# converte il fileimport cgitext = cgi.escape(text) # converte i caratteritext = text.expandtabs(4) # trasforma i tab in spazi

# salva il testo nel file "to.txt"file('to.txt', 'w').write(text)

Il testo ottenuto può essere così inserito nel proprio blog, o articolo, delimitandolo adeguatamente:

<pre class="code">...inserire il codice qui...</pre>

Per comodità ho già preparato un programma che effettua la conversione da un file all’altro. Le istruzioni possono essere ottenute digitando python html2html -h dalla console.

Il file è il seguente, da eseguire come qualsiasi altro script:

== FILE: html2html.py ==#! /usr/bin/python

__version__ = "1.0"__author__ = "Davide Muzzarelli (info@dav-muz.net)"__copyright__ = "(C) 2006 Davide Muzzarelli. GNU GPL 2."

import sys, cgi

if '-h' in sys.argv or '--help' in sys.argv: print """Usage: html2html SOURCE DEST

html2html.py --v1.0-- Convert a text in order to be used in a HTML page, useful for code postings.

Copyright (c) Davide Muzzarelli, 2006""" sys.exit(0)else: try:     from_file = sys.argv[1]     to_file = sys.argv[2] except:     print "Error: specify the source file and the destination file\nFor more informations please use the -h option."     sys.exit(0)

 # load text = file(from_file, 'r').read()

 # conversion text = cgi.escape(text) text = text.expandtabs(4)

 # save file(to_file, 'w').write(text)
]]>
/blog/2006/11/convertire-lhtml-in-html-sicuro/feed/ 1
Create an image model for your photos in Django with multiple categories /blog/2006/07/create-an-image-model-for-your-photos-in-django-with-multiple-categories/ /blog/2006/07/create-an-image-model-for-your-photos-in-django-with-multiple-categories/#comments Tue, 18 Jul 2006 21:45:00 +0000 Davide Muzzarelli /blog/2006/07/create-an-image-model-for-your-photos-in-django-with-multiple-categories/ I write this post because Django documentation is not exhaustive for the ImageField.

Create an application in your project with:

$ python manager.py startapp photos

You can use what application name you like.

Then create the directory “photos” in your media directory.

Enter in the application directory and edit the models.py file:

from django.db import models

class PhotoCategory (models.Model):  name = models.CharField(maxlength=32)

  def __str__ (self):      return self.name

  class Admin:      pass

  class Meta:      verbose_name_plural = 'photo categories'

class Photo (models.Model):  description = models.CharField(maxlength=128)  pub_date = models.DateField('Publication date', core=True, auto_now_add=True)  category = models.ManyToManyField(PhotoCategory, verbose_name=_('photo categories'), blank=True, filter_interface=models.HORIZONTAL)  printable = models.BooleanField(help_text='Is this image for publishing aims?')  restricted = models.BooleanField(help_text='Is this image only for selected people?')  image = models.ImageField('Image file in hi resolution', upload_to="photos", height_field='height', width_field='width', core=True, help_text='Use the highest resolution possible.')  height = models.IntegerField(default=None, null=True, blank=True, help_text = "Image height in pixels (automatically filled in for you)")  width = models.IntegerField(default=None, null=True, blank=True, help_text = "Image width in pixels (automatically filled in for you)")

  def __str__ (self):      return self.normal_image + ': ' + self.description

  class Admin:      list_filter = ['normal_image']      search_fields = ['description', 'normal_image']      date_hierarchy = 'pub_date'      list_display = ('normal_image', 'description', 'pub_date')

  class Meta:      verbose_name_plural = 'photos'

Save the file and run these commands:

$ python manage.py syncdb

Django will create for you tables and permissions.

Then run:

$ python manage.py runserver

and access to the administration panel to add your photos!

All photos will be stored in your media/photos/ directory. Files with the same name will be renamed automatically.

Note that there is the #1537 bug: “ImageField height_field and width_field does not update after changing the image”

]]>
/blog/2006/07/create-an-image-model-for-your-photos-in-django-with-multiple-categories/feed/ 0