python - Django Error: TypeError: expected string or buffer -
i'm writing code django-based static blog, coming across similar issue across 3 or 4 different areas of code. figured if can 1 fixed can others fixed well. code of focus django-command call update_blog1
. here's traceback...
traceback (most recent call last): file "c:\python34\lib\site-packages\django\core\handlers\base.py", line 132, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) file "c:/users/jaysp_000/firstsite/projectone\blog_static\views.py", line 179, in archive {'posts' : posts} file "c:/users/jaysp_000/firstsite/projectone\blog_static\views.py", line 14, in render_response return render_to_response(*args, **kwargs) file "c:\python34\lib\site-packages\django\shortcuts.py", line 45, in render_to_response using=using) file "c:\python34\lib\site-packages\django\template\loader.py", line 116, in render_to_string template_name, context, context_instance, dirs, dictionary) file "c:\python34\lib\site-packages\django\template\engine.py", line 221, in render_to_string return t.render(context_instance) file "c:\python34\lib\site-packages\django\template\base.py", line 208, in render context.bind_template(self): file "c:\python34\lib\contextlib.py", line 59, in __enter__ return next(self.gen) file "c:\python34\lib\site-packages\django\template\context.py", line 235, in bind_template updates.update(processor(self.request)) file "c:\python34\lib\site-packages\django\template\context_processors.py", line 56, in i18n context_extras['language_bidi'] = translation.get_language_bidi() file "c:\python34\lib\site-packages\django\utils\translation\__init__.py", line 177, in get_language_bidi return _trans.get_language_bidi() file "c:\python34\lib\site-packages\django\utils\translation\trans_real.py", line 263, in get_language_bidi base_lang = get_language().split('-')[0] attributeerror: 'nonetype' object has no attribute 'split' during handling of above exception, exception occurred: traceback (most recent call last): file "c:\python34\lib\site-packages\django\utils\formats.py", line 103, in get_format cached = _format_cache[cache_key] keyerror: ('r', none) during handling of above exception, exception occurred: traceback (most recent call last): file "c:\program files (x86)\jetbrains\pycharm 4.5.3\helpers\pycharm\django_manage.py", line 41, in <module> run_module(manage_file, none, '__main__', true) file "c:\python34\lib\runpy.py", line 182, in run_module return _run_module_code(code, init_globals, run_name, mod_spec) file "c:\python34\lib\runpy.py", line 96, in _run_module_code mod_name, mod_spec, pkg_name, script_name) file "c:\python34\lib\runpy.py", line 85, in _run_code exec(code, run_globals) file "c:/users/jaysp_000/firstsite/projectone\manage.py", line 10, in <module> execute_from_command_line(sys.argv) file "c:\python34\lib\site-packages\django\core\management\__init__.py", line 338, in execute_from_command_line utility.execute() file "c:\python34\lib\site-packages\django\core\management\__init__.py", line 330, in execute self.fetch_command(subcommand).run_from_argv(self.argv) file "c:\python34\lib\site-packages\django\core\management\base.py", line 390, in run_from_argv self.execute(*args, **cmd_options) file "c:\python34\lib\site-packages\django\core\management\base.py", line 441, in execute output = self.handle(*args, **options) file "c:/users/jaysp_000/firstsite/projectone\blog_static\management\commands\update_blog1.py", line 78, in handle resp = client.get(path) file "c:\python34\lib\site-packages\django\test\client.py", line 500, in **extra) file "c:\python34\lib\site-packages\django\test\client.py", line 303, in return self.generic('get', path, secure=secure, **r) file "c:\python34\lib\site-packages\django\test\client.py", line 379, in generic return self.request(**r) file "c:\python34\lib\site-packages\django\test\client.py", line 448, in request response = self.handler(environ) file "c:\python34\lib\site-packages\django\test\client.py", line 122, in __call__ response = self.get_response(request) file "c:\python34\lib\site-packages\django\core\handlers\base.py", line 218, in get_response response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) file "c:\python34\lib\site-packages\django\core\handlers\base.py", line 261, in handle_uncaught_exception return debug.technical_500_response(request, *exc_info) file "c:\python34\lib\site-packages\django\views\debug.py", line 97, in technical_500_response html = reporter.get_traceback_html() file "c:\python34\lib\site-packages\django\views\debug.py", line 384, in get_traceback_html return t.render(c) file "c:\python34\lib\site-packages\django\template\base.py", line 209, in render return self._render(context) file "c:\python34\lib\site-packages\django\template\base.py", line 201, in _render return self.nodelist.render(context) file "c:\python34\lib\site-packages\django\template\base.py", line 903, in render bit = self.render_node(node, context) file "c:\python34\lib\site-packages\django\template\debug.py", line 79, in render_node return node.render(context) file "c:\python34\lib\site-packages\django\template\debug.py", line 89, in render output = self.filter_expression.resolve(context) file "c:\python34\lib\site-packages\django\template\base.py", line 674, in resolve new_obj = func(obj, *arg_vals) file "c:\python34\lib\site-packages\django\template\defaultfilters.py", line 771, in date return formats.date_format(value, arg) file "c:\python34\lib\site-packages\django\utils\formats.py", line 136, in date_format return dateformat.format(value, get_format(format or 'date_format', use_l10n=use_l10n)) file "c:\python34\lib\site-packages\django\utils\formats.py", line 110, in get_format module in get_format_modules(lang): file "c:\python34\lib\site-packages\django\utils\formats.py", line 82, in get_format_modules modules = _format_modules_cache.setdefault(lang, list(iter_format_modules(lang, settings.format_module_path))) file "c:\python34\lib\site-packages\django\utils\formats.py", line 51, in iter_format_modules if not check_for_language(lang): file "c:\python34\lib\site-packages\django\utils\translation\__init__.py", line 181, in check_for_language return _trans.check_for_language(lang_code) file "c:\python34\lib\functools.py", line 472, in wrapper result = user_function(*args, **kwds) file "c:\python34\lib\site-packages\django\utils\translation\trans_real.py", line 409, in check_for_language if not language_code_re.search(lang_code): typeerror: expected string or buffer
here's code update_blog1
from django.core.management.base import basecommand django.core.urlresolvers import reverse django.test.client import client import sys, os optparse import make_option p1config.settings import staticblog_post_directory, staticblog_compile_directory class command(basecommand): = "compile blog posts html markdown, , upload images s3 defaults processing new blog posts" option_list = basecommand.option_list + ( make_option( '--all', action='store_true', dest='all', default=false, help='get blog posts, regardless of date' ), make_option( '--name', action='store', dest='post_name', default=false, help='get named blog post' ), ) def handle(self, *args, **options): verbosity = int(options.get('verbosity')) client = client() outdir = staticblog_compile_directory posts = [] previews = [] if options['all']: if verbosity > 3: print ('compiling blog posts') posts = self._get_all_posts() elif options['post_name']: posts = self._get_named_posts(options['post_name']) else: if verbosity > 3: print ('compiling new blog posts') posts = self._get_all_posts(new = true) if verbosity > 3: print ('%d posts found' % len(posts)) print ('----------------------------') post in posts: if verbosity > 3: print ("compiling " + post['md_name'] + " " + post['html_name']) path = reverse('blog_static.views.archive') + post['path'] # path = '/preview/' + post['path'] resp = client.get(path) if os.path.exists(outdir + post['path']) == false: try: open(outdir + post['path'], 'r') f: pass except ioerror e: os.mkdir(outdir + post['path']) open(outdir + post['html_name'], 'wb') f: f.write(resp.content) if len(posts) > 0 , verbosity > 3: print ('----------------------------') if verbosity > 3: print ('updating listings...') print ('----------------------------') path = reverse('blog_static.views.archive') resp = client.get(path) open(staticblog_compile_directory + 'index.html', 'wb') f: f.write(resp.content) if verbosity > 3: print ('done') def _get_all_posts(self, new = false): posts = [] item in os.listdir(staticblog_post_directory): post = self._create_post(item, new) if post: posts.append(post) return posts def _get_named_posts(self, post): post_list = post.split(',') posts = [] item in post_list: try: open(staticblog_post_directory + item, 'r') f: post = self._create_post(item) if post: posts.append(post) except ioerror e: print ('\033[01;31m' + str(e) + '\033[0m', file= sys.stderr) return posts def _create_post(self, item, new = false): outdir = staticblog_post_directory compiled_post = { 'md_name' : item, 'html_name' : '', 'path' : '', 'html' : '', } if item.endswith('.md'): compiled_post['path'] = item.replace('.md', '') compiled_post['html_name'] = compiled_post['path'] + '/index.html' if new: try: open(staticblog_compile_directory + compiled_post['html_name'], 'r') f: return false except ioerror e: return compiled_post else: return compiled_post
if in code, methods _get_named_posts()
, _create_post()
, handle()
each have open() function embedded. these open() functions (ex: open(outdir + post['path'], 'r'
or open(staticblog_post_directory + item, 'r')
) problem lies, pointed out pycharm.
in view.py file
, got have this...
# django imports django.template import requestcontext django.shortcuts import render_to_response, render django.core.files.storage import get_storage_class django.core.files.base import contentfile django.views.decorators.csrf import csrf_exempt django.db import models # create 'shortcut' function wrap request in requestcontext() def render_response(req, *args, **kwargs): """shortcut wrap request in requestcontext""" kwargs['context_instance'] = requestcontext(req) return render_to_response(*args, **kwargs) # standard python lib import os, sys, urllib, hashlib # 3rd party apps import markdown markdown.inlinepatterns import imagepattern, image_link_re # config folder p1config.settings import staticblog_compile_directory, \ staticblog_post_directory, \ staticblog_storage ################################################################################### class s3imagepattern(imagepattern): """ wrapper class handle image matches in markdown document """ def handlematch(self, match): node = imagepattern.handlematch(self, match) # check 'src' ensure local src = node.attrib.get('src') storage_class = get_storage_class(staticblog_storage) storage = storage_class() # otherwise need downloading! if 'http://' in src or 'https://' in src: img_data = urllib.request.urlopen(src).read() md5 = hashlib.md5() md5.update(img_data) name = md5.hexdigest() + '/' + os.path.basename(src) else: open(staticblog_post_directory + src) fhandle: img_data = fhandle.read() name = src print('uploading ' + src, file=sys.stderr) try: storage.save(name, contentfile(img_data)) node.attrib['src'] = storage.url(name) print ('uploaded ' + src + ' ' + storage.url(name), file=sys.stderr) except exception e: print(str(e), file=sys.stderr) print ('\033[01;31mupload of %s failed\033[0m' % src, file=sys.stderr) return node def render_post(request, post_name): """ render blog post based on .post template used template rendered html in folder defined staticblog_compile_directory """ content = "" mdown = markdown.markdown(extensions = ['meta',]) mdown.inlinepatterns['image_link'] = s3imagepattern(image_link_re, mdown) try: post_file_dir = os.path.join(staticblog_post_directory, post_name + '.md') open(post_file_dir, 'r') pfdir: content = pfdir.read() # opening , reading entire '.md' document html = mdown.convert(content) # converting file '.md' ".html" except ioerror e: print (str(e)) open(os.path.join(staticblog_post_directory, 'preview2.md')) f: content = f.read() html = mdown.convert(content) post = { 'content' : html, } try: post['date'] = mdown.meta['date'][0] post['title'] = mdown.meta['title'][0] post['author'] = mdown.meta['author'][0] post['summary'] = mdown.meta['summary'][0] post['tags'] = mdown.meta['tags'][0] except: pass meta = {} if 'title' in post: meta['title'] = post['title'] # context object containing post, meta contexes context = {'post' : post, 'meta' : meta} return render_response( # use render? request, 'post2.html', context ) def archive(request): mdown = markdown.markdown(extensions = ['meta',]) # create empty post list posts = [] import string # @ every 'item' in staticblog_compile_directory item in os.listdir(staticblog_compile_directory): # if 'item' in directory ends '.post' (like '.md' in markdown file, or '.py' in python file) # more specifically, if there '.post' file located in directory... if item.endswith('.md'): # ...continue on and... continue # ...attempt use 'item' try: # ...by opening it, open(os.path.join(staticblog_post_directory, item + '.md')) fhandle: # ...reading markdown file, content = fhandle.read() # (opening , reading entire '.md' document) # ...and converting html. mdown.convert(content) # (converting file '.md' ".html") post = { 'name' : item, } if 'title' in mdown.meta , len(mdown.meta['title'][0]) > 0: # add markdown document's 'title' post[] # stores post's title "meta" section of '.md' document post['title'] = mdown.meta['title'][0] # if doesnt work... else: # add post list item's meta 'title', takes \n # title of .md document , removes '-' it, \n # can make post's title. post['title'] = string.capwords(item.replace('-', ' ')) # ...and if there exists 'date' in item's meta attribute... if 'date' in mdown.meta: # pass 'date' info found in meta attribute 'date' \n # variable created in post list post['date'] = mdown.meta['date'][0] posts.append(post) except: pass operator import itemgetter posts = sorted(posts, key=itemgetter('date')) posts.reverse() return render_response( # use render? request, 'archive.html', {'posts' : posts} ) @csrf_exempt def handle_hook(request): django.http import httpresponse django.core.management import call_command result = call_command('update_blog', verbosity = 0) return httpresponse(result)
i dont know how fix this. can let me know how fix these issues? don't know can put string or buffer in code.
Comments
Post a Comment