अद्यतन: इस पोस्ट के निचले हिस्से में कुछ और डिबगिंग जानकारी, जो अजगर राज्य में बहुत खराब दिखती है।फ़ंक्शन चलाते समय आयातित मॉड्यूल कोई नहीं बनते
मेरे पास एक मॉड्यूल है जो अन्य चीजों के साथ आयात करता है, django उपयोगकर्ता ऑब्जेक्ट।
आयात ठीक काम करता है, और कोड लोड होता है। हालांकि, जब आप उस ऑब्जेक्ट में फ़ंक्शन को कॉल करते हैं जो उपयोगकर्ता ऑब्जेक्ट का उपयोग करता है, तो यह त्रुटियों को कहता है कि उपयोगकर्ता कोई नहीं टाइप टाइप है।
कई अन्य आयात भी हैं, और कुछ मॉड्यूल स्तर वैश्विक चर जो फ़ंक्शन कहलाते समय भी कोई नहीं हैं।
विचित्र रूप से, यह हमारे स्टेजिंग वातावरण (उबंटू 12.04) में केवल एक समस्या है। यह स्थानीय रूप से ठीक काम करता है, जो शायद देव काम के लिए अतिरिक्त पायथन पैकेज के साथ स्टेजिंग जैसा दिखता है। उत्पादन में भी ठीक है।
क्या कोई इस से पहले आया है, और कोई विचार है कि इसका क्या कारण हो सकता है?
कोड यह रहा:
import urllib
import time
import urlparse
# Django imports
from django.db.models.signals import post_delete
from django.db import models
from django.contrib.auth.models import User
from backends.cache.dualcache import cache
# Piston imports
from managers import TokenManager, ConsumerManager
from signals import consumer_post_delete
KEY_SIZE = 18
SECRET_SIZE = 32
VERIFIER_SIZE = 10
CONSUMER_STATES = (
('pending', 'Pending'),
('accepted', 'Accepted'),
('canceled', 'Canceled'),
('rejected', 'Rejected')
)
def generate_random(length=SECRET_SIZE):
return User.objects.make_random_password(length=length)
class Consumer(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
key = models.CharField(max_length=KEY_SIZE)
secret = models.CharField(max_length=SECRET_SIZE)
status = models.CharField(max_length=16, choices=CONSUMER_STATES, default='pending')
objects = ConsumerManager()
def __unicode__(self):
return u"Consumer %s with key %s" % (self.name, self.key)
def generate_random_codes(self):
key = User.objects.make_random_password(length=KEY_SIZE)
secret = generate_random(SECRET_SIZE)
while Consumer.objects.filter(key__exact=key, secret__exact=secret).count():
secret = generate_random(SECRET_SIZE)
self.key = key
self.secret = secret
self.save()
और यहाँ काम के आसपास है, जो मूल रूप से आयात करने के लिए क्या आप समारोह के अंदर फिर से की जरूरत है अर्थ होता है:
import urllib
import time
import urlparse
# Django imports
from django.db.models.signals import post_delete
from django.db import models
from django.contrib.auth.models import User
from backends.cache.dualcache import cache
# Piston imports
from managers import TokenManager, ConsumerManager
from signals import consumer_post_delete
KEY_SIZE = 18
SECRET_SIZE = 32
VERIFIER_SIZE = 10
CONSUMER_STATES = (
('pending', 'Pending'),
('accepted', 'Accepted'),
('canceled', 'Canceled'),
('rejected', 'Rejected')
)
def generate_random(length=SECRET_SIZE):
return User.objects.make_random_password(length=length)
class Consumer(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
key = models.CharField(max_length=KEY_SIZE)
secret = models.CharField(max_length=SECRET_SIZE)
status = models.CharField(max_length=16, choices=CONSUMER_STATES, default='pending')
objects = ConsumerManager()
def __unicode__(self):
return u"Consumer %s with key %s" % (self.name, self.key)
def generate_random_codes(self):
from piston.models import KEY_SIZE, SECRET_SIZE, Consumer
from django.contrib.auth.models import User
from piston.models import generate_random
key = User.objects.make_random_password(length=KEY_SIZE)
secret = generate_random(SECRET_SIZE)
while Consumer.objects.filter(key__exact=key, secret__exact=secret).count():
secret = generate_random(SECRET_SIZE)
self.key = key
self.secret = secret
self.save()
यहाँ स्टैक ट्रेस है। त्रुटि लाइन के कारण होती है:
key = User.objects.make_random_password(length=KEY_SIZE)
gener_random_codes फ़ंक्शन में।
Traceback:
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
366. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
91. response = view_func(request, *args, **kwargs)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
89. response = view_func(request, *args, **kwargs)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
196. return view(request, *args, **kwargs)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
25. return bound_func(*args, **kwargs)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
91. response = view_func(request, *args, **kwargs)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
21. return func(self, *args2, **kwargs2)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/db/transaction.py" in inner
224. return func(*args, **kwargs)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/contrib/admin/options.py" in add_view
970. form = ModelForm(initial=initial)
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/forms/models.py" in __init__
234. self.instance = opts.model()
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/db/models/base.py" in __init__
349. val = field.get_default()
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/db/models/fields/related.py" in get_default
983. field_default = super(ForeignKey, self).get_default()
File "/sites/tellybug/shared/webserver/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py" in get_default
379. return self.default()
File "/sites/tellybug/releases/b92109dd526607b2af92ad6b7f494f3f06e31bb2/webserver/tellybug/tbapp/models/tellybugapp.py" in generate_new_consumer
11. consumer.generate_random_codes()
File "/sites/tellybug/releases/b92109dd526607b2af92ad6b7f494f3f06e31bb2/webserver/tellybug/piston/models.py" in generate_random_codes
57. key = User.objects.make_random_password(length=KEY_SIZE)
Exception Type: AttributeError at /admin/tbapp/tellybugapp/add/
Exception Value: 'NoneType' object has no attribute 'objects'
अद्यतन: यह कुछ सिर्फ उपयोगकर्ता ऑब्जेक्ट को हटाने नहीं है - कुछ समारोह में पूरे संदर्भ नष्ट कर रहा है।
def generate_random_codes(self):
"""
Used to generate random key/secret pairings. Use this after you've
added the other data in place of save().
c = Consumer()
c.name = "My consumer"
c.description = "An app that makes ponies from the API."
c.user = some_user_object
c.generate_random_codes()
"""
import sys
print "Globals", globals()
print "Name ", __name__
print "Package ", __package__
print "Sys modules", sys.modules['piston.models'].__dict__
key = User.objects.make_random_password(length=KEY_SIZE)
इन प्रिंट बयान के साथ
, उत्पादन होता है:
Globals {'ColumnFamilyMap': None, 'datetime': None, 'KEY_SIZE': None, 'TokenManager': None, 'ConsistencyLevel': None, 'Nonce': None, 'uuid': None, 'cache': None, 'urllib': None, '__package__': None, 'models': None, 'User': None, .... }
Name None
Package None
Sys modules {'ColumnFamilyMap': <class 'pycassa.columnfamilymap.ColumnFamilyMap'>, 'datetime': <type 'datetime.datetime'>, 'KEY_SIZE': 18, 'NonceType': <class 'piston.models.NonceType'>, 'OAuthToken': <class 'piston.models.OAuthToken'>, 'TokenManager': <class 'piston.managers.TokenManager'>, 'ConsistencyLevel': <class 'pycassa.cassandra.ttypes.ConsistencyLevel'>, 'Nonce': <class 'piston.models.Nonce'>, 'uuid': <module 'uuid' from '/usr/lib/python2.7/uuid.pyc'>, ...}
ध्यान दें कि दोनों __package__
और __name__
अपरिभाषित कर रहे हैं, जो मैंने सोचा था कि काफी असंभव था, और है कि जब तक की sys.modules संस्करण मॉड्यूल में एक सही __dict__
है, globals()
से वापसी मूल्य बकवास है।
कृपया हमें वह कोड दिखाएं जो अपवाद फेंकता है, साथ ही पूर्ण ट्रेसबैक भी। –
क्या आप सुनिश्चित हैं कि त्रुटि मॉडल से आ रही है, कहीं और नहीं? कृपया ट्रेसबैक भी दिखाएं। –
धन्यवाद, जोड़ा गया स्टैक ट्रेस और लाइन जो त्रुटि फेंक रही है। –