Sì, questo era un bug. È fisso in lampadine 0.3.23:
https://github.com/espeed/bulbs/commit/7f104cdbc30f27ea76b036cfa0d0a694f074153e
Domanda
Sto ricevendo errori Unicode mentre provo ad aggiungere dati a NEO4J tramite lampadine quando i dati contengono dati non ASCII.
Il seguente codice fallisce:
from bulbs.model import Node
from bulbs.property import String
from bulbs.neo4jserver import Graph
class User(Node):
element_type="user"
name = String(nullable=False)
g = Graph()
g.add_proxy("users", User)
user_data = {u'name': u'Aname M\xf6ller'}
g.users.create(**user_data)
con un UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 7: ordinal not in range(128)
L'errore si sta verificando in bulbs.utils.u
funzione, via codecs.unicode_escape_decode()
.
Alcune informazioni pertinenti, si spera,:
$>python -V
'2.7.3'
>>>type(user_data['name'])
type('unicode')
>>>import bulbs
>>>bulbs.__version__
'0.3'
I documenti neo4j stato Che tutti gli oggetti stringa vengono salvati come Unicode, quindi perché i miei dati Unicode non vengono accettati? Spero di aver perso qualcosa di sciocco.
Soluzione
Sì, questo era un bug. È fisso in lampadine 0.3.23:
https://github.com/espeed/bulbs/commit/7f104cdbc30f27ea76b036cfa0d0a694f074153e
Altri suggerimenti
Dopo essermi rinfrescato su Python e Unicode, ho aggirato il problema, anche se solo avvolgendo la mia linea di problema con un tentativo, cattura e quindi codificando i dati del problema su "UTF-8". Non è la soluzione più elegante, ma il seguente codice sembra funzionare per me.
from bulbs.model import Node
from bulbs.property import String
from bulbs.neo4jserver import Graph
class User(Node):
element_type="user"
name = String(nullable=False)
g = Graph()
g.add_proxy("users", User)
user_data = {u'name': u'Aname M\xf6ller'}
try:
g.users.create(**user_data)
except UnicodeEncodeError:
for k, v in user_data.iteritems():
try:
user_data[k] = unicode.encode(v, 'utf-8')
except TypeError:
# Fails for non string values
pass
g.users.create(**user_data)
L'unico problema che ho con questo. Se la bulbs
Logger è attivo, quindi l'errore MSG con un traceback viene registrato sulla prima chiamata a create()
. Non è un affare, solo un po 'fastidioso.
Non hai provato questo su Python 3, qualcuno ha qualcosa in cui interrompere la questione?