From b204cbb7080754f1c418fc5129cb223d63643807 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Sun, 17 Jul 2011 09:45:29 +0530 Subject: [PATCH] fixes to page: restrict name to 20 chars and ignore files if no module, doclist --- cgi-bin/core/doctype/page/page.py | 35 +++++++++++++++++++++++++------ cgi-bin/webnotes/model/doclist.py | 31 +++++++++++++++++++++------ cgi-bin/webnotes/widgets/page.py | 30 +++++++++++++++++--------- 3 files changed, 74 insertions(+), 22 deletions(-) diff --git a/cgi-bin/core/doctype/page/page.py b/cgi-bin/core/doctype/page/page.py index 5e2b873b99..1323d1d85e 100644 --- a/cgi-bin/core/doctype/page/page.py +++ b/cgi-bin/core/doctype/page/page.py @@ -1,12 +1,30 @@ +import webnotes + class DocType: def __init__(self, d, dl): self.doc, self.doclist = d,dl def autoname(self): + """ + Creates a url friendly name for this page. + Will restrict the name to 30 characters, if there exists a similar name, + it will add name-1, name-2 etc. + """ + from webnotes.utils import cint if (self.doc.name and self.doc.name.startswith('New Page')) or not self.doc.name: - self.doc.name = self.doc.page_name.lower().replace(' ', '-') + self.doc.name = self.doc.page_name.lower().replace('"','').replace("'",'').replace(' ', '-')[:20] + if webnotes.conn.exists('Page',self.doc.name): + cnt = webnotes.conn.sql('select name from tabPage where name like "%s-%%" order by name desc limit 1' % self.doc.name) + if cnt: + cnt = cint(cnt[0][0].split('-')[-1]) + 1 + else: + cnt = 1 + self.doc.name += '-' + str(cnt) def onload(self): + """ + loads html from file before passing + """ import os from webnotes.modules import get_module_path, scrub @@ -19,9 +37,10 @@ class DocType: if e.args[0]!=2: raise e - # replace $image - # ------------------ def validate(self): + """ + Update $image tags + """ import re p = re.compile('\$image\( (?P [^)]*) \)', re.VERBOSE) if self.doc.content: @@ -34,12 +53,16 @@ class DocType: # export def on_update(self): - from webnotes.modules.export_module import export_to_files - from webnotes.modules import get_module_path, scrub - import os + """ + Writes the .txt for this page and if write_content is checked, + it will write out a .html file + """ from webnotes import defs if getattr(defs,'developer_mode', 0): + from webnotes.modules.export_module import export_to_files + from webnotes.modules import get_module_path, scrub + import os export_to_files(record_list=[['Page', self.doc.name]]) if self.doc.write_content and self.doc.content: diff --git a/cgi-bin/webnotes/model/doclist.py b/cgi-bin/webnotes/model/doclist.py index e4ecfc888e..2e83200559 100644 --- a/cgi-bin/webnotes/model/doclist.py +++ b/cgi-bin/webnotes/model/doclist.py @@ -16,17 +16,36 @@ class DocList: self.docs = [] self.obj = None self.to_docstatus = 0 + if dt and dn: + self.load_from_db(dt, dn) + def load_from_db(self, dt, dn): + """ + Load doclist from dt + """ + from webnotes.model.doc import Document, getchildren + + doc = Document(dt, dn, prefix=prefix) + + # get all children types + tablefields = webnotes.model.meta.get_table_fields(dt) + + # load chilren + doclist = [doc,] + for t in tablefields: + doclist += getchildren(doc.name, t[0], t[1], dt, prefix=prefix) + + self.docs = docs def __iter__(self): """ - Make this iterable + Make this iterable """ return self.docs.__iter__() def from_compressed(self, data, docname): """ - Expand called from client + Expand called from client """ from webnotes.model.utils import expand self.docs = expand(data) @@ -34,7 +53,7 @@ class DocList: def objectify(self, docname=None): """ - Converts self.docs from a list of dicts to list of Documents + Converts self.docs from a list of dicts to list of Documents """ from webnotes.model.doc import Document @@ -52,7 +71,7 @@ class DocList: def make_obj(self): """ - Create a DocType object + Create a DocType object """ if self.obj: return self.obj @@ -62,13 +81,13 @@ class DocList: def next(self): """ - Next doc + Next doc """ return self.docs.next() def to_dict(self): """ - return as a list of dictionaries + return as a list of dictionaries """ return [d.fields for d in self.docs] diff --git a/cgi-bin/webnotes/widgets/page.py b/cgi-bin/webnotes/widgets/page.py index 09fd79649f..25e0387ac0 100644 --- a/cgi-bin/webnotes/widgets/page.py +++ b/cgi-bin/webnotes/widgets/page.py @@ -14,25 +14,39 @@ class Page: def __init__(self, name): self.name = name - def load(self): + def get_from_files(self, doc): """ - Returns :term:`doclist` of the `Page` + Loads page info from files in module """ from webnotes.modules import compress from webnotes.model.code import get_code + + # load js + doc.fields['__script'] = compress.get_page_js(doc) + doc.script = None + + # load css + css = get_code(doc.module, 'page', doc.name, 'css') + if css: doc.style = css + + # html + doc.content = get_code(doc.module, 'page', doc.name, 'html') or doc.content + + def load(self): + """ + Returns :term:`doclist` of the `Page` + """ + from webnotes.model.code import get_code doclist = webnotes.model.doc.get('Page', self.name) doc = doclist[0] - doc.fields['__script'] = compress.get_page_js(doc) - doc.script = None + if doc.module: self.get_from_files(doc) template = '%(content)s' # load code from template if doc.template: template = get_code(webnotes.conn.get_value('Page Template', doc.template, 'module'), 'Page Template', doc.template, 'html', fieldname='template') - - doc.content = get_code(doc.module, 'page', doc.name, 'html') or doc.content # execute content if doc.content and doc.content.startswith('#!python'): @@ -40,10 +54,6 @@ class Page: else: doc.__content = template % {'content': doc.content or ''} - # local stylesheet - css = get_code(doc.module, 'page', doc.name, 'css') - if css: doc.style = css - # add stylesheet if doc.stylesheet: doclist += self.load_stylesheet(doc.stylesheet)