¿Qué credenciales debo colocar para el motor de aplicación BulkLoader de Google en el servidor de desarrollo?

Me gustaría preguntar qué tipo de credenciales debo colocar para importar datos usando la clase BulkLoader de Google App Engine

appcfg.py upload_data --config_file=models.py --filename=listcountries.csv --kind=CMSCountry --url=http://localhost:8178/remote_api vit/ 

Y luego me pide credenciales:

Por favor ingrese las credenciales de inicio de sesión para localhost

Aquí hay una extracción del contenido de los modelos.py, uso este archivo listcountries.csv

 class CMSCountry(db.Model): sortorder = db.StringProperty() name = db.StringProperty(required=True) formalname = db.StringProperty() type = db.StringProperty() subtype = db.StringProperty() sovereignt = db.StringProperty() capital = db.StringProperty() currencycode = db.StringProperty() currencyname = db.StringProperty() telephonecode = db.StringProperty() lettercode = db.StringProperty() lettercode2 = db.StringProperty() number = db.StringProperty() countrycode = db.StringProperty() class CMSCountryLoader(bulkloader.Loader): def __init__(self): bulkloader.Loader.__init__(self, 'CMSCountry', [('sortorder', str), ('name', str), ('formalname', str), ('type', str), ('subtype', str), ('sovereignt', str), ('capital', str), ('currencycode', str), ('currencyname', str), ('telephonecode', str), ('lettercode', str), ('lettercode2', str), ('number', str), ('countrycode', str) ]) loaders = [CMSCountryLoader] 

Cada bash de ingresar el resultado del correo electrónico y la contraseña en “Error de autenticación”, por lo que no pude importar los datos al servidor de desarrollo.

No creo que tenga ningún problema con mis archivos ni con mis modelos porque he cargado los datos correctamente en la aplicación appspot.com.
Entonces, ¿qué debo poner para las credenciales de localhost?
También traté de usar Eclipse con Pydev pero aún así recibí el mismo mensaje 🙁
Aquí está la salida:

 Uploading data records. [INFO ] Logging to bulkloader-log-20090820.121659 [INFO ] Opening database: bulkloader-progress-20090820.121659.sql3 [INFO ] [Thread-1] WorkerThread: started [INFO ] [Thread-2] WorkerThread: started [INFO ] [Thread-3] WorkerThread: started [INFO ] [Thread-4] WorkerThread: started [INFO ] [Thread-5] WorkerThread: started [INFO ] [Thread-6] WorkerThread: started [INFO ] [Thread-7] WorkerThread: started [INFO ] [Thread-8] WorkerThread: started [INFO ] [Thread-9] WorkerThread: started [INFO ] [Thread-10] WorkerThread: started Password for foobar@nowhere.com: [DEBUG ] Configuring remote_api. url_path = /remote_api, servername = localhost:8178 [DEBUG ] Bulkloader using app_id: abc [INFO ] Connecting to /remote_api [ERROR ] Exception during authentication Traceback (most recent call last): File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\bulkloader.py", line 2802, in Run request_manager.Authenticate() File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\bulkloader.py", line 1126, in Authenticate remote_api_stub.MaybeInvokeAuthentication() File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\ext\remote_api\remote_api_stub.py", line 488, in MaybeInvokeAuthentication datastore_stub._server.Send(datastore_stub._path, payload=None) File "D:\Projects\GoogleAppEngine\google_appengine\google\appengine\tools\appengine_rpc.py", line 344, in Send f = self.opener.open(req) File "C:\Python25\lib\urllib2.py", line 381, in open response = self._open(req, data) File "C:\Python25\lib\urllib2.py", line 399, in _open '_open', req) File "C:\Python25\lib\urllib2.py", line 360, in _call_chain result = func(*args) File "C:\Python25\lib\urllib2.py", line 1107, in http_open return self.do_open(httplib.HTTPConnection, req) File "C:\Python25\lib\urllib2.py", line 1082, in do_open raise URLError(err) URLError:  [INFO ] Authentication Failed 

¡Gracias!

Te recomiendo que sigas el consejo dado aquí , y cito:

añade esto al archivo app.yaml:

 -- url: /loadusers script: myloader.py login: admin 

Tenga en cuenta que si lo ejecuta en la máquina de desarrollo local, comente la última línea de inicio de sesión: admin para que no necesite una credencial para ejecutar el cargador masivo .

(mi énfasis).

EUREKA: Encontré la forma de usar la herramienta bulkloader.py sin tener que ingresar manualmente las credenciales de inicio de sesión.

Aquí están los 2 pasos:


Configure su archivo app.yaml . Ejemplo:

 - url: /remote_api script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py login: admin 

Debe ponerlo ANTES de su línea - url: .* En app.yaml , de lo contrario nunca accederá a la dirección /remote_api url.

Tenga en cuenta que he dejado el login: admin parte de login: admin , ya que eliminarlo es una práctica MUY MALA, ya que podría implementarlo en producción …


2 Ejecuta este comando (adáptalo a tus necesidades).

 echo 'XX' | python2.5 ../google_appengine/bulkloader.py --dump --kind=NAMEOFMODEL --url=http://localhost:8080/remote_api --filename=FILENAME --app_id=APPID --email=foobar@nowhere.com --passin . 

El truco es usar la combinación de esos 2 parámetros:

  • --email= (puede poner cualquier dirección de correo electrónico que desee, uso foobar@nowhere.com )
  • --passin

Especificando --email= suprimirá el mensaje “ingrese credenciales”, y --passin permitirá leer la contraseña de stdin (¡ahí es donde entra el echo 'XX' | en juego!)


¡Disfrutar!

PD: No se olvide de votar para que Google pueda proporcionar una manera más fácil de hacerlo: Problema 2440 .

Edit: mira mi nueva solución

Este problema sigue presente. He abierto un ticket para preguntar si la autenticación podría omitirse en el servidor de desarrollo local. Por favor vote por este problema para que podamos resolverlo [rápidamente].

He podido cargar datos en el servidor dev por:

  • dejando la línea “login: admin” en app.yaml
  • agregando “–email=foobar@nowhere.com” a su comando
  • presionando Intro cuando se le solicite una contraseña (no se requiere nada)

Dejar la línea de “inicio de sesión: administrador” es algo bueno, ya que no cargará su aplicación en los servidores de producción sin esta línea, lo que podría exponerlo a alguien que agregue datos a su almacén de datos …

Blockquote

Sí, comente el requisito de administración para el remote_api:

[app.yaml]

 - url: / remote_api
   script: $ PYTHON_LIB / google / appengine / ext / remote_api / handler.py
  # login: admin

Luego ejecuta este comando:

 $ bulkloader.py --dump --kind = DbMyKind --url = http: // localhost: 8080 / remote_api --filename = export.csv --app_id = my_appid --auth_domain = localhost: 8080

Nota: verifique que –auth_domain se haya pasado, y que se haya pasado el puerto adecuado para localhost.

Utilice aaa@gmail.com para el nombre de usuario.

Utilice a para la contraseña.

Funciona. Por arte de magia.

Primero necesita crear una credencial de administrador en su servidor de desarrollo local.

Con su Firefox (o Chrome Safari, etc.), abra http: // localhost: 8178 / remote_api , se le solicitará que inicie sesión (sin contraseña), ingrese un correo electrónico como su inicio de sesión y marque la casilla de login as administrater , iniciar sesión. Esto le creará una credencial de administrador local, use esto cuando realice una carga masiva local.

Se aplica a otros administradores que requieren acceso local.

Dejar (o comentar) el login:admin es una mala práctica, ya que también podría implementarlo en producción. ¡Cuídate!

Utilizo estos comandos para transferir datos del servidor local al remoto. La extensión del archivo (json) es importante. Marco: django-nonrel, os: Win7.

 manage.py dumpdata >dump.json manage.py remote loaddata dump.json 

Otra solución es apagar la función auth con lambda: http://www.carlosble.com/?p=603

El siguiente trabajo para mí:

  • quitando la linea

     login:admin 

    de app.yaml

  • Actualizando la aplicación cofig:

     appcfg.py update [app-id] 
  • (Re) iniciando servidor local:

     appserver [app-id] 
  • Subir datos:

     appcfg.py upload_data --config_file=album_loader.py --filename album_data.csv --kind Album --url=http://localhost:8080/remote_api ../[app-id] 

    Pregunta por cualquier tipo de correo y contraseña.