def run_search(pif): # form['var'] is now a possibility pif.render.hierarchy_append('/', 'Home') pif.render.hierarchy_append('/database.php', 'Database') pif.render.hierarchy_append(pif.request_uri, 'Model Search') mods = None pif.render.print_html() if pif.form.has('date'): return date_search(pif, pif.form.get_str('dt'), pif.form.get_str('yr')) if pif.form.has('query'): targ = pif.form.get_str('query') firstyear = pif.form.get_int('syear', 1) lastyear = pif.form.get_int('eyear', 9999) pif.render.title = 'Models matching name: ' + targ mods = search_name(pif) mods = [ pif.dbh.modify_man_item(x) for x in mods if x['section.page_id'] in ( 'manls', 'manno') and int(x['base_id.first_year']) >= firstyear and int(x['base_id.first_year']) <= lastyear ] elif pif.form.has('id'): targ = pif.form.get_str('id') mods = search_id(pif) if mods is None: raise useful.SimpleError( "Your query parameters do not make sense. Please try something different." ) pif.render.title = 'Models matching ID: ' + targ else: raise useful.SimpleError( "Your query parameters do not make sense. Please try something different." ) if not mods: raise useful.SimpleError( "Your query did not produce any models. Sorry 'bout that.") mods.sort(key=lambda x: x['rawname']) var_id = pif.form.get_str('var') if var_id: pif.render.set_button_comment(pif, 'query=%s' % (pif.form.get_str('query'))) llineup = create_var_lineup(pif, mods, var_id) else: pif.render.set_button_comment(pif, 'query=%s' % (pif.form.get_str('query'))) llineup = create_lineup(pif, mods) pif.render.format_matrix_for_template(llineup) return pif.render.format_template('simplematrix.html', llineup=llineup)
def change_password_main(pif): pif.render.title = 'Change Password' pif.render.hide_title = False pif.render.print_html() if not pif.user_id: raise useful.SimpleError("It doesn't look like you're logged in!") if pif.form.has('id') and pif.is_allowed('a') and pif.form.get_int('id') != pif.user_id: user = pif.dbh.fetch_user(pif.form.get_int('id')) else: user = pif.user if not user: raise useful.SimpleError('That user record ({}) was not found.'.format(pif.user_id)) if pif.is_allowed('a') and 'p1' in pif.form: user_id = pif.form.get_int('id') if pif.form.get_str('p1') != pif.form.get_str('p2'): useful.warn("The new passwords don't match!") else: pif.dbh.update_password(user_id, pif.form.get_str('p2')) useful.warn("This password has been changed.") elif 'op' in pif.form: newuser = pif.dbh.fetch_user(user_id=pif.user_id, passwd=pif.form.get_str('op')) if not newuser: useful.warn("That password isn't correct!") elif pif.form.get_str('p1') != pif.form.get_str('p2'): useful.warn("The new passwords don't match!") else: pif.dbh.update_password(pif.user_id, pif.form.get_str('p2')) pif.dbh.update_user(pif.user_id, ckey=uuid.uuid4()) pif.create_cookie() useful.warn("Your password has been changed.") entries = [ {'title': 'Old password:'******'value': '<input type="password" name="op">'}, {'title': 'New password:'******'value': '<input type="password" name="p1">'}, {'title': 'Retry new password:'******'value': '<input type="password" name="p2">'}, ] lsection = { 'columns': ['title', 'value'], 'range': [{'entry': entries}], 'note': '', 'noheaders': True, 'header': pif.render.format_form_start(method='post', token=pif.dbh.create_token()), 'footer': pif.render.format_hidden_input({'id': user['id']}) + pif.render.format_button_input() + "</form>", } return pif.render.format_template( 'simplelistix.html', header='''<br>You have requested to change your password.<br>''', llineup={'section': [lsection]}, nofooter=True)
def code2_model(pif): mod_id = pif.form.get_id('mod_id') cat_id = pif.form.get_str('cat') pif.render.print_html() pif.render.hierarchy_append('/', 'Home') pif.render.hierarchy_append('/database.php', 'Database') pif.render.hierarchy_append('/cgi-bin/code2.cgi', 'Code 2 Models') pif.render.set_button_comment(pif) mod = pif.dbh.modify_man_item(pif.dbh.fetch_casting(mod_id)) img = pif.render.format_image_required(mod_id, largest=mbdata.IMG_SIZ_MEDIUM, pdir=config.IMG_DIR_MAN) header = '<center>%s<br><b>%s: %s</b></center><p>' % (img, mod['id'], mod['name']) lsec = pif.dbh.fetch_section(page_id=pif.page_id, category=cat_id) if not lsec: raise useful.SimpleError('No models found.') lsec = lsec.todict() pif.render.hierarchy_append('/cgi-bin/code2.cgi?section=%s' % lsec['id'], lsec['name']) pif.render.hierarchy_append('/cgi-bin/code2.cgi?mod_id=%s&cat=%s' % (mod['id'], cat_id), mod['id']) lsec['range'] = [{'entry': []}] mvars = pif.dbh.fetch_variation_by_select(mod_id, pif.page_id, '', category=cat_id) for var in mvars: # useful.write_comment(var) entry = {'text': models.add_model_var_pic_link(pif, pif.dbh.depref('v', var))} lsec['range'][0]['entry'].append(entry) llineup = { 'section': [lsec], 'header': header, } pif.render.format_matrix_for_template(llineup) return pif.render.format_template('simplematrix.html', llineup=llineup)
def single_box_type(pif): pif.render.set_page_extra(pif.render.image_selector_js) if pif.form.get_str('box'): boxes = pif.dbh.fetch_box_type(pif.form.get_str('box')) elif pif.form.get_str('mod'): boxes = pif.dbh.fetch_box_type_by_mod(pif.form.get_str('mod'), pif.form.get_str('ty')) if not boxes: raise useful.SimpleError("No matching boxes found.") boxes = pif.dbh.depref('box_type', boxes) mod = pif.dbh.fetch_casting_by_id_or_alias(boxes[0]['mod_id']) if mod: mod = mod[0] mod['id'] = mod['alias.id'] if mod['alias.ref_id'] else mod[ 'casting.id'] lsection = dict( columns=['inf', 'pic'], headers={ 'inf': 'Box Information', 'pic': 'Box Picture' }, range=[dict(entry=[single_box(pif, mod, x) for x in boxes], note='')], note='') llistix = dict(section=[lsection]) return llistix
def mack_lineup(pif): pif.render.set_button_comment(pif, 'rg=%s&sec=%s&start=%s&end=%s' % (pif.form.get_str('region', ''), pif.form.get_str('sect', ''), pif.form.get_str('start', ''), pif.form.get_str('end', ''))) pif.render.hierarchy_append('/', 'Home') pif.render.hierarchy_append('/database.php', 'Database') pif.render.hierarchy_append(pif.request_uri, 'Mack Numbers') pif.render.print_html() series = ['RW', 'SF'] if pif.form.get_str('sect', 'all') == 'all' else [pif.form.get_str('sect').upper()] range = pif.form.get_str('range', 'all') start = 1 if range == 'all' else pif.form.get_int('start', 1) end = config.MAX_MACK_NUMBER if range == 'all' else pif.form.get_int('end', config.MAX_MACK_NUMBER) mods = mack_models(pif, start, end, series) if not mods: note = 'Your request produced no models.' if start > config.MAX_MACK_NUMBER: note += ' Be sure to use numbers from 1 to %d.' % config.MAX_MACK_NUMBER if start > end: note += " Use a start number that isn't higher than the end number." raise useful.SimpleError(note) #mods.sort(key=lambda x: (x['mack_id_unf'][1], x['mack_id_unf'][0], x['mack_id_unf'][2])) lsec = pif.dbh.fetch_sections({'page_id': pif.page_id})[0] lsec['range'] = [{'entry': mods}] llineup = {'section': [lsec]} pif.render.format_matrix_for_template(llineup) return pif.render.format_template('mack.html', llineup=llineup)
def read(self): self.tail['stat'] = time.strftime('Last updated %A, %d %B %Y at %I:%M:%S %p %Z.', time.localtime(self.srcstat.st_mtime)) try: return self.read_file(self.handle) except IOError: raise useful.SimpleError( """I'm sorry, that page was not found. Please use your "BACK" button or try something else.""")
def profile_main(pif): pif.render.title = 'User Profile' pif.render.hide_title = False pif.render.print_html() if not pif.user_id: raise useful.SimpleError("It doesn't look like you're logged in!") table_info = pif.dbh.table_info['user'] user = pif.user if not user: raise useful.SimpleError('That user record ({}) was not found.'.format(pif.user_id)) if 'user_id' in pif.form: newuser = pif.dbh.fetch_user(user_id=pif.form.get_str('user_id')) if newuser and newuser.id != pif.form.get_int('id'): raise useful.SimpleError('Sorry, but that user ID is already in use.') if pif.dbh.update_profile(user, **pif.form.form): useful.warn('Your profile has been updated.') else: useful.warn('Updating your profile failed.') # if email changed, clear verified header = pif.render.format_form_start(method='post', token=pif.dbh.create_token()) rows = table_info['editable'] desc = pif.dbh.describe_dict('user') def prof_row(row): return {'title': table_info['title'][row], 'value': pif.render.format_text_input( row, desc[row]['length'], 80, value=user[row]) + ( '<br>If you change your email address, you will have to verify the new one.' if row == 'email' else '')} entries = [prof_row(row) for row in rows] if user['flags'] & config.FLAG_USER_BAMCA_MEMBER: entries[0]['value'] += ' ' + pif.render.fmt_art('bamca_member') footer = pif.render.format_hidden_input({'id': user['id']}) footer += pif.render.format_button_input() + "</form>" footer += pif.render.format_button('change password', '/cgi-bin/chpass.cgi') if user['photographer_id']: footer += pif.render.format_button( 'your pictures', '/cgi-bin/photogs.cgi?id={}'.format(user['photographer_id'])) lsection = dict(columns=['title', 'value'], range=[{'entry': entries}], note='', noheaders=True, header=header, footer=footer) return pif.render.format_template( 'simplelistix.html', header=('''<br>Currently this information is only available to administrators of this website. We're ''' '''looking at possibly doing more in the future though.<br><br>'''), llineup=dict(section=[lsection]), nofooter=True)
def __init__(self, page_id, form_key='', defval='', args='', dbedit=None): self.render = self.dbh = None self.secure = secure.Security() self.htdocs = self.secure.docroot config.IS_BETA = self.secure.is_beta self.rawcookies = self.secure.get_cookies() user_id = self.rawcookies.get('id', '0') if isinstance(user_id, str): user_id = eval(user_id) if isinstance(user_id, (int, long)): self.id = user_id elif isinstance(user_id, tuple): user_id = user_id[0] config.USER_ID = self.user_id = user_id self.unittest = bool(args) # args comes from unittest only! self.argv = args.split() if args else sys.argv[1:] # argv comes from command line only! self.form = BaseForm(cgi.FieldStorage(), self.argv) self.page_id = self.get_page_id(page_id, form_key, defval) self.page_name = self.page_id[self.page_id.rfind('.') + 1:] self.time_start = datetime.datetime.now().strftime('%Y%m%d.%H%M%S') self.request_uri = os.environ.get('REQUEST_URI', 'unknown') self.remote_host = os.environ.get('REMOTE_HOST', 'host_unset') self.remote_addr = os.environ.get('REMOTE_ADDR', '127.0.0.1') self.is_web = 'REQUEST_METHOD' in os.environ # is apache! self.set_server_env() self.log = logger.Logger() self.format_type = 'python' self.render = render.Presentation(self.page_id, self.form.get_int('verbose')) self.render.secure = self.secure self.render.unittest = self.unittest self.render.comment('form', self.form.get_form()) self.privs = set(self.rawcookies.get('pr', '')) & set(self.form.get_str('privs', 'vuma')) self.secure.cookies = self.rawcookies.get('co') if self.is_allowed(dbedit): self.secure.set_config('edit') os.chdir(self.secure.docroot) self.cwd = os.getcwd() self.render.is_beta = self.secure.is_beta self.cgibin = '../cgi-bin' self.dbh = dbhand.DBHandler(self.secure.config, self.user_id, self.log.dbq, self.render.verbose) self.dbh.dbi.nowrites = self.unittest self.log_start() page_info = self.dbh.fetch_page(self.page_id) if not page_info: raise useful.SimpleError('Your request is incorrect (bad page id, %s). Please try something else.' % self.page_id) self.render.set_page_info(page_info) self.render.not_released = (self.render.flags & self.dbh.FLAG_PAGE_INFO_HIDDEN) != 0 self.render.hide_title = (self.render.flags & self.dbh.FLAG_PAGE_INFO_HIDE_TITLE) != 0 self.render.is_admin = self.is_allowed('a') self.render.is_moderator = self.is_allowed('m') self.render.is_user = self.is_allowed('u') self.render.is_viewer = self.is_allowed('v') if not self.is_web: useful.header_done(is_web=False) self.duplicate_form = self.form.has('token') and not self.dbh.insert_token(self.form.get_str('token'))
def show_dir(pif, tform): if not os.path.exists(tform.tdir): raise useful.SimpleError('Path does not exist.') ostr = '<hr>\n' #dl, gl, ol, sl, xl = imglib.get_dir(tform.tdir) files = imglib.get_dir(tform.tdir, name_has=tform.has) ostr += show_list(files['titles']['dir'], tform.tdir, files['dir'], tform.view) if files['graf']: if tform.graf: ostr += '<h4>%s (%d)</h4><div class="glist">\n' % (files['titles']['graf'], len(files['graf'])) for f in files['graf']: perms = os.stat(tform.tdir + '/' + f)[stat.ST_MODE] if (perms & 4) == 0: ostr += '%s<br>\n' % f elif tform.graf: #ostr += '<a href="/cgi-bin/traverse.cgi?d=%s&f=%s"><img src="../%s" border=0>%s</a><br>' % (tform.tdir, f, tform.tdir + '/' + f, f) ostr += '<a href="imawidget.cgi?d=%s&f=%s&man=%s&newvar=%s&cy=0&suff=%s"><img src="../%s" border=0>%s</a><br>\n' % (tform.tdir, f, tform.mod, tform.var, tform.suff, tform.tdir + '/' + f, f) else: ostr += '<a href="../%s">%s</a><br>\n' % (tform.tdir + '/' + f, f) ostr += '</div><hr>\n' else: ostr += show_list(files['titles']['graf'], tform.tdir, files['graf'], tform.view) ostr += show_list(files['titles']['log'], tform.tdir, files['log'], tform.view) ostr += show_list(files['titles']['dat'], tform.tdir, files['dat'], tform.view) ostr += show_list(files['titles']['exe'], tform.tdir, files['exe'], tform.view) ostr += show_list(files['titles']['other'], tform.tdir, files['other'], tform.view) if pif.render.is_admin: ostr += '<a href="upload.cgi?d=%s">%s</a>\n' % (tform.tdir, pif.render.format_button('upload')) if files['graf']: ostr += '<form action="traverse.cgi">\n' + pif.create_token() ostr += '<a href="traverse.cgi?g=1&d=%s">%s</a> or \n' % (tform.tdir, pif.render.format_button('show all pictures')) ostr += 'Pattern <input type="text" name="p">\n' ostr += '<input type="hidden" name="d" value="%s">\n' % tform.tdir ostr += '<input type="checkbox" name="du" value="1"> Dupes\n' ostr += '<input type="checkbox" name="co" value="1"> Compact\n' ostr += '<input type="checkbox" name="si" value="1"> Sized\n' if pif.render.is_admin: ostr += '<br><input type="radio" name="lty" value="nrm" checked> Normal\n' ostr += '<input type="radio" name="lty" value="shc"> Categorize\n' ostr += '<input type="radio" name="lty" value="mss"> VMass\n' ostr += '<input type="radio" name="lty" value="pms"> PMass\n' ostr += '<input type="radio" name="lty" value="shm"> Shelve\n' ostr += '<input type="radio" name="lty" value="suf"> Resuffix\n' ostr += '<input type="radio" name="lty" value="crd"> Credit\n' ostr += pif.render.format_button_input() ostr += '<br>\n' ostr += 'Size X <input type="text" name="sx">\n' ostr += 'Size Y <input type="text" name="sy">\n' ostr += '</form>\n' return ostr
def __init__(self, fname): if fname.startswith('/'): fname = fname[1:] self.filename = fname useful.write_comment('trying to open', fname) self.set_globals() try: self.handle = open(fname) except IOError: raise useful.SimpleError( """I'm sorry, that page was not found. Please use your "BACK" button or try something else.""") self.srcstat = os.fstat(self.handle.fileno()) self.ignoreoverride = False self.dats = {} self.parse()
def get_size(fn): try: l = pipe_chain(open(fn), import_file(fn) + [["/usr/local/bin/pamfile"]], subprocess.PIPE, verbose=False) except IOError: raise useful.SimpleError('Could not read ' + fn) f = l.split() try: x = int(f[3]) y = int(f[5]) except: x = y = 0 return (x, y)
def create(pif): # os.environ['PYTHON_EGG_CACHE'] = '/var/tmp' user_id = pif.form.get_str('user_id') p1 = pif.form.get_str('p') p2 = pif.form.get_str('p2') email = pif.form.get_str('email') if not user_id or (set(user_id) - set(string.ascii_letters + string.digits + '._')): raise useful.SimpleError('That is not a legal user ID.') if pif.dbh.fetch_user(user_id=user_id): raise useful.SimpleError('That ID is already in use.') if not email: raise useful.SimpleError('Please specify an email address.') if not p1 or p1 != p2: raise useful.SimpleError('Please specify the same password in both password boxes.') vkey = useful.generate_token(10) rec_id = pif.dbh.create_user(passwd=p1, vkey=vkey, privs='b', **pif.form.form) if rec_id: user = pif.dbh.fetch_user(id=rec_id) generate_signup_email(pif, user) useful.warn("Your account has been created. Please check your email for the verification.") raise useful.Redirect("/cgi-bin/validate.cgi") return pif.render.format_template('signup.html', dest=pif.form.get_str('dest'))
def mack_lineup(pif): pif.render.set_button_comment( pif, 'rg={}&sec={}&start={}&end={}'.format(pif.form.get_str('region', ''), pif.form.get_str('sect', ''), pif.form.get_str('start', ''), pif.form.get_str('end', ''))) pif.render.hierarchy_append('/', 'Home') pif.render.hierarchy_append('/database.php', 'Database') pif.render.hierarchy_append(pif.request_uri, 'Mack Numbers') pif.render.print_html() series = ['RW', 'SF'] if pif.form.get_str( 'sect', 'all') == 'all' else [pif.form.get_str('sect').upper()] range = pif.form.get_str('range', 'all') start = 1 if range == 'all' else pif.form.get_int('start', 1) end = config.MAX_MACK_NUMBER if range == 'all' else pif.form.get_int( 'end', config.MAX_MACK_NUMBER) text_list = pif.form.get_str('text', 'pic') == 'txt' amods = mack_models(pif, start, end, series) ranges = format_mack_text(pif, amods) if text_list else format_mack_html( pif, amods) if not ranges: note = 'Your request produced no models.' if start > config.MAX_MACK_NUMBER: note += ' Be sure to use numbers from 1 to {}.'.format( config.MAX_MACK_NUMBER) if start > end: note += " Use a start number that isn't higher than the end number." raise useful.SimpleError(note) lsec = pif.dbh.fetch_sections({'page_id': pif.page_id})[0] lsec['range'] = ranges llineup = {'section': [lsec]} if text_list: lsec['headers'] = { 'id': 'Mack ID', 'man': 'MAN ID', 'name': 'Name', 'year': 'Year', 'error': '' } lsec['columns'] = ['id', 'man', 'name', 'year', 'error'] return pif.render.format_template('simplelistix.html', llineup=llineup) pif.render.format_matrix_for_template(llineup) return pif.render.format_template('mack.html', llineup=llineup)
def get_size(fn): try: p = useful.pipe_chain(open_input_file(fn), import_file(fn) + [["/usr/local/bin/pamfile"]], stderr=subprocess.PIPE, verbose=False) except IOError: raise useful.SimpleError('Could not read ' + fn) # print('get_size', p) f = p.split() try: x = int(f[3]) y = int(f[5]) except Exception: x = y = 0 return (x, y)
def set_page_info(self, page_id): page_info = self.dbh.fetch_page(page_id) if not page_info: raise useful.SimpleError( 'Your request is incorrect (bad page id, %s). Please try something else.' % self.page_id, status=404) self.render.set_page_info(page_info) if self.render.flags & config.FLAG_PAGE_INFO_ADMIN_ONLY: self.restrict('a') if config.LOCKDOWN and not (self.render.flags & config.FLAG_PAGE_INFO_PUBLIC): self.restrict('b') self.render.not_released = (self.render.flags & config.FLAG_PAGE_INFO_HIDDEN) != 0 self.render.hide_title = (self.render.flags & config.FLAG_PAGE_INFO_HIDE_TITLE) != 0
def add_page(pif): pif.render.print_html() pif.render.set_page_extra(pif.render.reset_button_js) rejected, blacklist = read_blacklist(pif) for ent in blacklist: if pif.remote_addr == ent: raise useful.SimpleError( "You have been banned from using this service because of previous abuses. " "If you have a problem with this, contact us via email, but don't hope for much.") listCats, listIndices, dictCats, listRejectCats = read_config(pif) lnk = add_new_link(pif, dictCats, rejected) if pif.form.get_str('url') else '' context = { 'categories': listCats, 'countries': mbdata.countries, 'link': lnk, } return pif.render.format_template('tlinkadd.html', **context)
def do_prod_masses(pif, tform): ddir = tform.tdir.replace('lib', 'pic') print(pif.form.get_str('credit'), ddir, '<br>') if not os.path.exists(ddir): raise useful.SimpleError('Path does not exist.') siz = pif.form.get('tysz') cred = pif.form.get_str('credit') if cred: photog = pif.dbh.fetch_photographer(cred) if not photog: cred = '' for fn, nam in pif.form.get_list(start='nam.'): print('<hr>') print(fn, ddir, siz, nam, '<br>') rf = [False, False, False, False, False] pth = tform.tdir + '/' + fn q = ( 0, 0, ) + imglib.get_size(pth) nname = ddir + '/' + siz + '_' + nam + '.jpg' ts = (400, 0) ofi = imglib.shrinker(pth, nname, q, ts, rf) imglib.simple_save(ofi, nname) images.file_log(nname, tform.tdir) url = pif.secure_prod + nname[1:] link = pif.secure_prod title = nam if cred and not photog.flags & config.FLAG_PHOTOGRAPHER_PRIVATE: title += ' credited to ' + photog.name pif.render.message( 'Post to Tumblr: ', tumblr.Tumblr(pif).create_photo(caption=title, source=url, link=link)) pif.render.message('Credit added: ', pif.dbh.write_photo_credit(cred, ddir, nam))
def update_user(pif): newuser = pif.dbh.fetch_user(user_id=pif.form.get_str('user_id')) if newuser and newuser.id != pif.form.get_int('id'): raise useful.SimpleError('The requested user ID is already in use.') pif.form.set_val('flags', pif.form.get_bits('flags')) pif.dbh.update_user(pif.form.get_int('id'), **pif.form.get_dict(keylist=pif.dbh.table_info['user']['columns']))
def publication(pif): pif.render.print_html() pub_id = pif.form.get_str('id') man = pif.dbh.fetch_publication(pub_id) if not man: raise useful.SimpleError("That publication was not found.") man = man[0] man['casting_type'] = 'Publication' man['name'] = man['base_id.rawname'].replace(';', ' ') imgs = pub_images(pif, pub_id) left_bar_content = '' if pif.is_allowed('a'): # pragma: no cover left_bar_content += '<p><b><a href="%s">Base ID</a><br>\n' % pif.dbh.get_editor_link( 'base_id', {'id': pub_id}) left_bar_content += '<a href="%s">Publication</a><br>\n' % pif.dbh.get_editor_link( 'publication', {'id': pub_id}) left_bar_content += '<a href="traverse.cgi?d=.%s">Library</a><br>\n' % config.IMG_DIR_CAT left_bar_content += '<a href="upload.cgi?d=.%s&n=%s&c=%s">Product Upload</a><br>\n' % ( config.IMG_DIR_CAT, pub_id, pub_id) upper_box = '' if imgs: upper_box += pif.render.format_image_link_image( imgs[0], link_largest=mbdata.IMG_SIZ_LARGE) else: upper_box += pif.render.format_image_link_image( img, link_largest=mbdata.IMG_SIZ_LARGE) if man['base_id.description']: upper_box += '<br>' if upper_box else '' upper_box += man['base_id.description'] lran = { 'id': 'ran', 'entry': [{ 'text': pif.render.format_image_link_image(img[img.rfind('/') + 1:]) } for img in sorted(imgs)] if imgs else [{ 'text': pif.render.format_image_link_image(pub_id) }] } llineup = { 'id': pub_id, 'name': '', 'section': [{ 'id': 'sec', 'range': [lran], 'columns': 4 }], 'columns': 4 } pif.render.set_button_comment(pif, 'id=%s' % pub_id) pif.render.format_matrix_for_template(llineup) context = { 'title': man.get('name', ''), 'note': '', 'type_id': '', #'icon_id': pub_id, 'vehicle_type': '', 'rowspan': 5 if upper_box else 4, 'left_bar_content': left_bar_content, 'upper_box': upper_box, 'llineup': llineup, } return pif.render.format_template('pub.html', **context)
def publication_list(pif, mtype): sec = get_section_by_model_type(pif, mtype) if not sec: raise useful.SimpleError("That publication type was not found.") if sec.id == 'ads': raise useful.Redirect('ads.cgi?title=' + pif.form.get_str('title')) sobj = pif.form.search('title') pif.render.pic_dir = sec.page_info.pic_dir pubs = pif.dbh.fetch_publications(model_type=mtype) def pub_ent(pub): ret = pub.todict() ret.update(ret['base_id']) if not useful.search_match(sobj, ret['rawname']): return None ret['name'] = '<a href="pub.cgi?id=%s">%s</a>' % ( ret['id'], ret['rawname'].replace(';', ' ')) ret['description'] = useful.printablize(ret['description']) if (os.path.exists( os.path.join(pif.render.pic_dir, ret['id'].lower() + '.jpg')) or glob.glob( os.path.join(pif.render.pic_dir, '?_' + ret['id'].lower() + '_*.jpg')) or glob.glob( os.path.join(pif.render.pic_dir, '?_' + ret['id'].lower() + '.jpg'))): ret['picture'] = mbdata.comment_icon['c'] return ret if 1: entry = [pub_ent(pub) for pub in pubs] hdrs = { 'description': 'Description', 'first_year': 'Year', 'country': 'Country', 'flags': 'Flags', 'model_type': 'Type', 'id': 'ID', 'name': 'Name', 'picture': '' } cols = ['picture', 'name', 'description', 'first_year', 'country'] lrange = dict(entry=[x for x in entry if x], styles=dict(zip(cols, cols))) lsection = dict(columns=cols, headers=hdrs, range=[lrange], note='', name=sec.name) llistix = dict(section=[lsection]) return pif.render.format_template('simplelistix.html', llineup=llistix) cols = 4 def pub_text_link(pub): pic = pif.render.fmt_img(pub['id'], prefix='s') name = pic + '<br>' + pub['name'] if pic else pub['name'] return { 'text': pif.render.format_link("makes.cgi?make=" + pub['id'], name) } ents = [pub_text_link(pub_ent(x)) for x in pubs] llineup = { 'id': '', 'name': '', 'columns': cols, 'header': '', 'footer': '', 'section': [{ 'columns': cols, 'range': [{ 'entry': ents, 'id': 'makelist' }] }] } pif.render.format_matrix_for_template(llineup) return pif.render.format_template('simplematrix.html', llineup=llineup)
def show_single(pif): model = pif.dbh.fetch_casting(pif.form.get_id('id'), extras=True, verbose=True) if not model: raise useful.SimpleError("That ID wasn't found.") pif.render.print_html(status=404 if not model else 200) useful.write_comment('model', model) pic = pif.form.get_str('pic') pdir = pif.form.get_str('dir') if pdir.startswith('./'): pdir = pdir[2:] if not pdir.startswith('pic/') or '/' in pic: pdir = pic = '' ref = pif.form.get_id('ref') sub = pif.form.get_str('sub') reg = sub if sub else pic[4] if ( ref.startswith('year') and pic and len(pic) > 4 and pic[:4].isdigit()) else '' mod_id = model['id'] pif.render.hierarchy_append('/', 'Home') pif.render.hierarchy_append('/database.php', 'Database') pif.render.hierarchy_append('/cgi-bin/single.cgi', 'By ID') pif.render.hierarchy_append('/cgi-bin/single.cgi?id=%s' % mod_id, mod_id) pif.render.comment('id=', mod_id, 'man=', model) raw_variations = variations = [] if ref: sub = mbdata.get_region_tree(reg) + [''] raw_variations = pif.dbh.fetch_variation_by_select(mod_id, ref, sub) variations = reduce_variations(pif, mod_id, raw_variations) # years 1971 to 1981 needs to cleave W to U and R appearances = list() for appear in pif.dbh.depref('lineup_model', pif.dbh.fetch_casting_lineups(mod_id)): if (appear.get('region', '') == 'W' and int(appear.get('year', 0)) >= 1971 and int(appear.get('year', 0)) <= 1981): nappear = copy.deepcopy(appear) nappear['region'] = 'U' appear['region'] = 'R' appearances.append(nappear) appearances.append(appear) lm_pic_id = '' prod_title = '' if ref.startswith('year.'): for appear in appearances: if appear.get('page_id', '-') == ref and (appear.get( 'region', '-') in sub or sub == ['']): prod_title = appear['name'] lm_pic_id = appear['picture_id'] break if pif.form.has('useprev'): # pragma: no cover pic = use_previous_product_pic(pif, pif.form.get_int('useprev'), appear) appearances.sort(key=lambda x: x['year']) aliases = [x['alias.id'] for x in pif.dbh.fetch_aliases(mod_id, 'mack')] matrixes = pif.dbh.fetch_matrix_appearances(mod_id) matrixes.sort(key=lambda x: x['page_info.description'] + x['section.name']) for appear in matrixes: appear['title'] = [appear['section.name'], appear['page_info.description']] if appear['page_info.flags'] & 2 \ else [appear['page_info.title'], appear['page_info.description'], appear['section.name']] sections_recs = pif.dbh.fetch_sections(where="page_id like 'year.%'") sections = {} for section in sections_recs: if section['columns'] and not section['display_order']: sections.setdefault(section['page_id'][5:], []) sections[section['page_id'][5:]].append(section) boxstyles = pif.dbh.fetch_box_type_by_mod(model['id']) pif.render.title = '%(casting_type)s %(id)s: %(name)s' % model product_img = pif.render.format_image_sized(pic, pdir=pdir, largest=mbdata.IMG_SIZ_MEDIUM) product_img_credit = pif.dbh.fetch_photo_credit(pdir, pic, verbose=True) product_img_credit = product_img_credit[ 'photographer.name'] if product_img_credit else '' if product_img and pif.is_allowed('a'): # pragma: no cover img = img_re.search(product_img).group('u') url = 'imawidget.cgi?d=%s&f=%s' % tuple(img[3:].rsplit('/', 1)) product_img = pif.render.format_link(url, product_img) vscounts = pif.dbh.fetch_variation_select_counts(mod_id) model['imgid'] = [model['id']] descs = [] for s in model['descs']: if s.startswith('same as '): model['imgid'].append(s[8:]) if s in mbdata.arts: descs.append(pif.render.format_image_art(mbdata.arts[s])) elif s: descs.append("<i>%s</i>" % s) model['descs'] = descs model['img'] = pif.render.format_image_required( model['imgid'], made=model['made'], pdir=config.IMG_DIR_MAN, largest=mbdata.IMG_SIZ_MEDIUM if product_img else mbdata.IMG_SIZ_LARGE) model_img_credit = pif.dbh.fetch_photo_credit('.' + config.IMG_DIR_MAN, model['imgid'][0], verbose=True) model['credit'] = model_img_credit[ 'photographer.name'] if model_img_credit else '' if model['country']: model['country_flag'] = pif.render.format_image_flag(model['country']) model['country_name'] = mflags.FlagList()[model['country']] def make_make_link(make, name): if not make: return '' if not name: name = 'unlicensed' pic = pif.render.fmt_img(make, prefix='u', pdir=config.IMG_DIR_MAKE) if pic: name = pic + '<br>' + name return pif.render.format_link("makes.cgi?make=" + make, name) model['make_name'] = make_make_link(model.get('make', ''), model.get('vehicle_make.name', '')) def make_make(make): return { 'image': pif.render.fmt_img(make['vehicle_make.id'], prefix='u', pdir=config.IMG_DIR_MAKE), 'id': make['vehicle_make.id'], 'name': make['vehicle_make.name'], 'company_name': make['vehicle_make.company_name'], 'flags': make['vehicle_make.flags'] | make['casting_make.flags'], 'link': 'makes.cgi?make=%s' % make['vehicle_make.id'], } model['makes'] = [ make_make(x) for x in pif.dbh.fetch_casting_makes(mod_id) ] adds = [make_boxes(pif, mod_id, boxstyles, aliases)] if boxstyles else [] adds += models.make_adds(pif, mod_id) plants = make_plants(pif, mod_id, pif.dbh.fetch_variation_plant_counts(mod_id)) # ------- render ------------------------------------ pif.render.set_button_comment( pif, 'id=%s&pic=%s&dir=%s&ref=%s' % (mod_id, pic, pdir, ref)) context = { 'title': '%s %s: %s' % (mbdata.model_types[model['model_type']], mod_id, model['name']), 'note': '', 'type_id': '', 'icon_id': mod_id if os.path.exists( useful.relpath('.', config.IMG_DIR_ICON, 'i_' + mod_id.lower() + '.gif')) else '', 'vehicle_type': [mbdata.model_icons.get(x) for x in model['vehicle_type']], 'rowspan': '4', 'left_bar_content': show_left_bar_content(pif, model, ref, pic, pdir, lm_pic_id, raw_variations), 'model': model, 'variations': variations, 'prod_title': prod_title, 'product_image': product_img, 'product_img_credit': product_img_credit, 'mack_nums': get_mack_numbers(pif, mod_id, model['model_type'], aliases), 'product_pic': pic, 'appearances': show_lineup_appearances(pif, appearances), 'matrixes': show_series_appearances(pif, matrixes), 'code2s': show_code2_appearances(pif, mod_id, vscounts), 'packs': show_pack_appearances( pif, sorted(pif.dbh.fetch_pack_model_appearances(mod_id), key=lambda x: x['base_id.first_year'])), 'show_comparison_link': pif.dbh.fetch_casting_related_exists(mod_id, model['model_type'].lower()), 'external_links': show_external_links(pif, pif.dbh.fetch_links_single('single.' + mod_id)), 'relateds': make_relateds(pif, mod_id), 'compares': make_compares(pif, mod_id), 'adds_box': models.show_adds(pif, mod_id), 'adds': adds, 'plants': plants, # 'group': pif.render.find_image_path(mod_id, prefix='g', pdir=config.IMG_DIR_ADD) } return pif.render.format_template('single.html', **context)
def single_publication(pif, pub_id): man = pif.dbh.fetch_publication(pub_id).first if not man: raise useful.SimpleError("That publication was not found.") pif.render.pic_dir = picdirs.get(man.base_id.model_type, pif.render.pic_dir) # should just use man.section_id sec = get_section_by_model_type(pif, man.base_id.model_type) # pif.set_page_info(sec.page_info.id) # obviously not right but I don't know what is. man['casting_type'] = 'Publication' man['name'] = man['base_id.rawname'].replace(';', ' ') imgs = pub_images(pif, pub_id.lower()) relateds = make_relateds( pif, 'pub.' + mbdata.model_type_names[man['base_id.model_type']].lower(), pub_id, imgs) left_bar_content = '' if pif.is_allowed('a'): # pragma: no cover left_bar_content += '<p><b><a href="%s">Base ID</a><br>\n' % pif.dbh.get_editor_link( 'base_id', {'id': pub_id}) left_bar_content += '<a href="%s">Publication</a><br>\n' % pif.dbh.get_editor_link( 'publication', {'id': pub_id}) left_bar_content += '<a href="traverse.cgi?d=%s">Library</a><br>\n' % pif.render.pic_dir.replace( 'pic', 'lib') left_bar_content += '<a href="upload.cgi?d=%s&n=%s&c=%s">Product Upload</a><br>\n' % ( pif.render.pic_dir.replace('pic', 'lib'), pub_id, pub_id) upper_box = '' if imgs: upper_box += pif.render.format_image_link_image( imgs[0], link_largest=mbdata.IMG_SIZ_LARGE) # else: # upper_box += pif.render.format_image_link_image(img, link_largest=mbdata.IMG_SIZ_LARGE) if man['base_id.description']: upper_box += '<br>' if upper_box else '' upper_box += useful.printablize(man['base_id.description']) lran = [{ 'id': 'ran', 'entry': [{ 'text': pif.render.format_image_link_image(img[img.rfind('/') + 1:]) } for img in sorted(imgs)] if imgs else [{ 'text': pif.render.format_image_link_image(pub_id) }] } if len(imgs) > 1 else {}] if relateds: lran.append({ 'id': 'related', 'entry': relateds, 'name': 'Related Models' }) llineup = { 'id': pub_id, 'name': '', 'section': [{ 'id': 'sec', 'range': lran, 'columns': 4 }], 'columns': 4 } pif.render.set_button_comment(pif, 'id=%s' % pub_id) pif.render.format_matrix_for_template(llineup) context = { 'title': man.get('name', ''), 'note': '', 'type_id': 'p_' + sec.id, # 'icon_id': pub_id, 'vehicle_type': '', 'rowspan': 5 if upper_box else 4, 'left_bar_content': left_bar_content, 'upper_box': upper_box, 'llineup': llineup, } return pif.render.format_template('pub.html', **context)
def do_single_pack(pif, format_type, pid): pack = dict() packs = pif.dbh.fetch_pack(pid) if not packs: raise useful.SimpleError( "That %s doesn't seem to exist." % ('pack' if format_type == 'packs' else 'playset')) pif.render.hierarchy_append('', packs[0]['base_id.rawname'].replace(';', ' ')) pif.render.print_html() llineup = dict(section=[], tail=[''], id='') for pack in packs: pack_id = pack['pack.id'] pack['longid'] = pack_id + ('-' + pack['pack.var'] if pack['pack.var'] else '') db_relateds = pif.dbh.fetch_packs_related(pack_id) relateds = [{ 'link': pif.render.format_link( "?page=" + pif.form.get_str('page') + "&id=" + r['pack.id'], r['base_id.rawname'].replace(';', ' ')), 'product_code': r['pack.product_code'], 'region': mbdata.regions.get(r['pack.region'], ''), 'country': mbdata.get_country(r['pack.country']), 'material': mbdata.materials.get(r['pack.material'], ''), 'description': r['base_id.description'], } for r in db_relateds] tcomments = set() pack.update({key[key.find('.') + 1:]: pack[key] for key in pack}) pack['name'] = pack['rawname'].replace(';', ' ') pmodels = distill_models(pif, pack, pack['page_id']) if pack['layout'].isdigit() and len(pack['layout']) == 4: layout = [int(x) for x in pack['layout'][:3]] + pack['layout'][3:] elif not pmodels: layout = pack_layouts['01s'] else: layout = pack_layouts.get(pack['layout'], pack_layouts['04h']) if len(layout) == 2: layout[3] = 1 if len(layout) == 3: layout[4] = 4 - (layout[0] - layout[1]) pif.render.comment('pack:', pack) entries = [{ 'text': show_pack(pif, pack, layout[3]), 'class': 'width_' + layout[3], 'display_id': '0', 'colspan': layout[1], 'rowspan': layout[2] }] for mod in sorted(pmodels.keys()): pif.render.comment("do_single_pack mod", pmodels[mod]) if not pmodels[mod].get('id'): pmodels[mod]['no_casting'] = 1 tcomments.add('m') else: if pmodels[mod]['imgstr'].find('-') < 0: tcomments.add('i') if not pmodels[mod].get('vs.var_id'): pmodels[mod]['no_variation'] = 1 tcomments.add('v') entries.append({ 'text': show_pack_model(pif, pmodels[mod]), 'display_id': 1 }) llineup['section'].append( dict(id='', columns=layout[0], anchor=pack['id'], range=[{ 'entry': entries }])) # left bar left_bar_content = '' if pif.is_allowed('a'): # pragma: no cover left_bar_content += '<br><center>' left_bar_content += ( '<p><b><a href="%s">Base ID</a></b><br>\n' % pif.dbh.get_editor_link('base_id', {'id': pack_id})) left_bar_content += '<b><a href="%s">Pack</a></b><br>\n' % pif.dbh.get_editor_link( 'pack', {'id': pack_id}) left_bar_content += ( '<b><a href="traverse.cgi?d=.%s">Library</a></b><br>\n' % pif.render.pic_dir.replace('/pic/', '/lib/')) left_bar_content += ( '<b><a href="mass.cgi?verbose=1&type=pack§ion_id=%s&pack=%s&num=">Edit</a></b><br>\n' % (packs[0]['section_id'], pack_id)) left_bar_content += ( '<b><a href="upload.cgi?d=./%s&n=%s">Package</a><br>\n' % (pif.render.pic_dir.replace('pic', 'lib'), pack_id)) left_bar_content += ( '<b><a href="upload.cgi?d=./%s&n=%s">Contents</a><br>\n' % (pif.render.pic_dir.replace('prod', 'set').replace( 'pic', 'lib'), pack_id)) left_bar_content += '</center>\n' pif.render.set_button_comment(pif, 'd=%s' % pif.form.get_str('id')) pif.render.format_matrix_for_template(llineup) context = { 'title': packs[0]['name'], 'note': packs[0]['note'], 'type_id': 'p_' + packs[0]['section_id'], 'icon_id': '', # pack_id, 'vehicle_type': '', 'rowspan': 4, 'left_bar_content': left_bar_content, 'llineup': llineup, 'relateds': relateds, } return pif.render.format_template('pack.html', **context)
def edit_single(pif): listCats, listIndices, dictCats, listRejectCats = read_config(pif, True) listCats.append(('single', 'single')) table_info = pif.dbh.table_info['link_line'] link_id = pif.form.get_str('id') if pif.form.get_str('save'): all_links, highest_disp_order = read_all_links(pif) nlink = {x: pif.form.get_str(x) for x in table_info['columns']} nlink['flags'] = 0 if pif.form.get_str('section_id') == 'single': pass else: nlink['page_id'] = 'links.' + dictCats.get( pif.form.get_str('section_id', ''), pif.form.get_str('section_id', '')) nlink['display_order'] = highest_disp_order.get((nlink['page_id'], nlink['section_id']), 0) + 1 for flag in pif.form.get_list('flags'): nlink['flags'] += int(flag, 16) if nlink['flags'] & config.FLAG_LINK_LINE_NOT_VERIFIABLE: nlink['last_status'] = 'NoVer' pif.dbh.update_link_line(nlink) pif.render.message('<br>record saved<br>') elif pif.form.get_str('test'): link = pif.dbh.fetch_link_line(link_id)[0] check_link(pif, link) # don't care about blacklist here, just actual check elif pif.form.get_str('delete'): pif.dbh.delete_link_line(link_id) return "<br>deleted<br>" elif pif.form.get_str('reject'): nlink = {x: pif.form.get_str(x, '') for x in table_info['columns']} nlink['page_id'] = 'links.rejects' nlink['display_order'] = 1 nlink['section_id'] = pif.form.get_str('rejects_sec') nlink['flags'] = 0 pif.dbh.update_link_line(nlink) pif.render.message('<br>record rejected<br>') elif pif.form.get_str('add'): link_id = ( # pif.dbh.insert_link_line( # {'page_id': pif.form.get_str('page_id', ''), 'section_id': pif.form.get_str('sec')}) # pif.form.set_val('id', pif.dbh.insert_link_line( {'page_id': pif.form.get_str('page_id'), 'country': '', 'flags': 1, 'link_type': 'l'})) links = pif.dbh.fetch_link_lines(where="id='%s'" % link_id) if not links: raise useful.SimpleError("That ID wasn't found.") link = links[0] asslinks = [(0, '')] + [(x['link_line.id'], x['link_line.name']) for x in pif.dbh.fetch_link_lines(flags=config.FLAG_LINK_LINE_ASSOCIABLE)] descs = pif.dbh.describe_dict('link_line') header = '<form>' + pif.create_token() header += '<input type="hidden" name="o_id" value="%s">\n' % link['link_line.id'] entries = [] for col in table_info['columns']: col_long = 'link_line.' + col coltype = descs.get(col).get('type', 'unknown') value = useful.printablize(link.get(col_long, '')) entries.append({'text': col}) # entries.append({'text': '<a href="%s">%s</a>' % (link.get(col_long, ''), link.get(col_long, '')) # if col == 'url' else link[col_long]}) entries.append({'text': '<a href="%s">%s</a>' % (value, value) if col == 'url' else value}) if col in table_info.get('readonly', []): cell = ' <input type="hidden" name="%s" value="%s">' % (col, value) # elif col == 'page_id': # cell = ' <input type="hidden" name="%s" value="%s">' % (col, value) elif col == 'section_id': cell = pif.render.format_select( 'section_id', listCats, selected=value, blank='Please choose one from the list') elif col == 'flags': cell = pif.render.format_checkbox("flags", flag_check_names, useful.bit_list(link[col_long])) elif col == 'country': cell = pif.render.format_select_country('country', value) elif col == 'link_type': cell = pif.render.format_select(col, link_type_names, selected=value) elif col == 'associated_link': cell = pif.render.format_select(col, asslinks, selected=value) elif coltype.startswith('varchar('): colwidth = int(coltype[8:-1]) cell = pif.render.format_text_input(col, colwidth, 64, value=value) elif coltype.startswith('int('): if link[col_long] is None: value = 0 colwidth = int(coltype[4:-1]) cell = pif.render.format_text_input(col, colwidth, value=value) else: cell = coltype entries.append({'text': cell}) footer = ''.join([ pif.render.format_button_input("save"), pif.render.format_button_input("delete"), pif.render.format_button_input("test"), pif.render.format_button_input("reject"), pif.render.format_select('rejects_sec', listRejectCats, blank='Please choose one from the list'), '</form>', pif.render.format_button("edit", link=pif.dbh.get_editor_link('link_line', {'id': link_id})), ]) llineup = { 'id': 'tl', 'name': 'Edit Link', 'columns': 3, 'widthauto': True, 'section': [{'id': 's', 'name': '', 'range': [{'entry': entries}]}], 'header': header, 'footer': footer, } pif.render.format_matrix_for_template(llineup) return pif.render.format_template('simplematrix.html', llineup=llineup)
def from_cat(self, pif): cat_id = pif.form.get_str('cat') cat = pif.dbh.fetch_category(cat_id) if not cat: raise useful.SimpleError('Category not found. %s' % cat_id) pif.render.title = cat.name pif.render.hierarchy_append('/database.php#cats', 'By Categories') pif.render.hierarchy_append('/cgi-bin/matrix.cgi?cat=%s' % cat_id, cat.name) ents = pif.dbh.fetch_variations_by_category(cat_id) mat = { # maybe make this the section for page_id='matrix'? 'id': 'cat', 'page_id': 'matrix', 'display_order': 0, 'category': cat['category.name'], 'flags': 0, 'name': '', 'columns': 4, 'start': 0, 'pic_dir': 'pic/prod/cat', 'disp_format': '', 'link_format': '', 'img_format': '', 'note': '', } # ffmt = {'link': mat['link_format'], 'disp': mat['disp_format'], 'img': mat['img_format']} mat['text'] = '' mat['ents'] = {} range_id = 1 pif.render.comment('matrix section:', mat) date_re = re.compile("^(?P<d>\d{4})") for ent in ents: ent.setdefault('vs.ref_id', '') ent.setdefault('vs.sub_id', '') date_m = date_re.search(ent['v.date']) if date_m: self.dates.add(date_m.group('d')) ent['id'] = ent['vs.id'] ent['mod_id'] = ent['v.mod_id'] ent['section_id'] = mat['id'] ent['display_order'] = 0 ent['page_id'] = 'matrix' ent['range_id'] = range_id ent['flags'] = 0 ent['shown_id'] = '' ent['name'] = ent['base_id.rawname'] ent['subname'] = '' ent['subnames'] = [] ent['sub_id'] = '' ent['model_type'] = ent['base_id.model_type'] ent.setdefault('pack.page_id', '') ent['description'] = [] range_id += 1 if ent.get('sub_id') and ent.get( 'vs.sub_id') and ent['sub_id'] != ent['vs.sub_id']: continue if ent.get('v.text_description'): ent['description'].append(ent['v.text_description']) ent['description'] = filter(None, ent['description']) ent['disp_id'] = '' ent['image'] = '' ent['link'] = '' ent['pdir'] = mat['pic_dir'] if not ent['pdir']: ent['pdir'] = pif.render.pic_dir if ent['model_type'] == 'MP': ent['image'] = \ pif.render.format_image_required(ent['mod_id'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_MAN, nopad=True) # elif ent['range_id'] and ffmt['img']: # ent['image'] = \ # pif.render.format_image_required([useful.clean_name(ffmt['img'] % ent['range_id'], '/')]) elif ent.get('v.picture_id'): ent['image'] = \ pif.render.format_image_required(ent['mod_id'] + '-' + ent['v.picture_id'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_VAR, nopad=True) elif ent.get('v.var'): ent['image'] = \ pif.render.format_image_required(ent['mod_id'] + '-' + ent['v.var'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_VAR, nopad=True) # if ent['range_id'] and ffmt['disp']: # ent['disp_id'] = ent['range_id'] # if ent['range_id'] and ffmt['link']: # if '%' in ffmt['link']: # ent['link'] = useful.clean_name(ffmt['link'] % ent['range_id'], '/') # else: # ent['link'] = useful.clean_name(ffmt['link'], '/') mat['ents'].setdefault(ent['range_id'], list()) mat['ents'][ent['range_id']].append(ent) ent['disp_format'] = mat['disp_format'] pif.render.comment(' entry:', ent) self.tables.append(mat)
def show_file(pif, tform): if not os.path.exists(tform.tdir + '/' + tform.fnam): raise useful.SimpleError('Path does not exist.') print( pif.render.format_button('delete', link=pif.request_uri + '&delete=1&act=1')) if os.path.exists(os.path.join(tform.tdir, 'archive')): print( pif.render.format_button('archive', link=pif.request_uri + '&archive=1&act=1')) if os.path.exists(os.path.join(tform.tdir, 'fixed')): print( pif.render.format_button('fixed', link=pif.request_uri + '&fixed=1&act=1')) if os.path.exists(os.path.join(tform.tdir, 'spam')) or os.path.exists( os.path.join(tform.tdir, '..', 'spam')): print( pif.render.format_button('spam', link=pif.request_uri + '&spam=1&act=1')) root, ext = useful.root_ext(tform.fnam) if not os.path.exists(tform.tdir + '/' + tform.fnam): print("file not found") elif ext in imglib.itypes: # if tform.tdir.startswith('..'): # print('<img src="/cgi-bin/image.cgi?d=%s&f=%s">' % (tform.tdir, tform.fnam)) # else: show_picture(pif, tform.fnam) # elif ext == 'dat': # show_table(pif, tform) elif tform.tdir.startswith('../../comments'): fil = open(tform.tdir + '/' + tform.fnam).read() if '{' in fil and '}' in fil: print(fil[:fil.index('{')]) data = eval(fil[fil.index('{'):fil.rindex('}') + 1]) print('<p><dl>') for key, val in sorted(data.items()): print('<dt>', key, '</dt><dd>', val, '</dd>') print('</dl>') print(fil[fil.rindex('}') + 1]) else: print('<p>', fil) elif tform.tdir == '../../logs': print('<p><div style="font-family: monospace;">') fil = open(tform.tdir + '/' + tform.fnam).readlines() for i in range(len(fil)): if fil[i].startswith('uri = '): fil[i] = """uri = <a href="%s">%s</a>\n""" % (fil[i][9:-4], fil[i][9:-4]) break print('<pre>') print(''.join(fil)) print('</pre>') print('</div>') else: print('<p>') fil = open(tform.tdir + '/' + tform.fnam).readlines() for i in range(len(fil)): if fil[i].startswith('uri = '): fil[i] = """uri = <a href="%s">%s</a>\n""" % (fil[i][9:-4], fil[i][9:-4]) break print('<br>'.join(fil))
def from_cat(self, pif): cat_id = pif.form.get_str('cat') if not cat_id: return cat = pif.dbh.fetch_category(cat_id) if not cat: raise useful.SimpleError('Category not found. %s' % cat_id) pif.render.title = cat.name pif.render.hierarchy_append('/database.php#cats', 'By Categories') pif.render.hierarchy_append('/cgi-bin/matrix.cgi?cat=%s' % cat_id, cat.name) mat = { # maybe make this the section for page_id='matrix'? 'id': 'cat', 'page_id': 'matrix', 'display_order': 0, 'category': cat['category.name'], 'flags': 0, 'name': '', 'columns': 4, 'start': 0, 'pic_dir': '', 'disp_format': '', 'link_format': '', 'img_format': '', 'note': '', } mat['text'] = '' mat['ents'] = {} pif.render.comment('matrix section:', mat) date_re = re.compile(r"^(?P<d>\d{4})") vsvars = pif.dbh.fetch_variations_by_vs_category(cat_id) vsvars = [x for x in vsvars if x.get('vs.ref_id') ] + [x for x in vsvars if not x.get('vs.ref_id')] for ent in vsvars: date_m = date_re.search(ent['v.date']) if date_m: self.dates.add(date_m.group('d')) ent['id'] = ent['vs.id'] ent['mod_id'] = ent['v.mod_id'] ent['var_id'] = ent['v.var'] range_id = ent['mod_id'] + '-' + ent['var_id'] ent['displayed_id'] = range_id ent['section_id'] = mat['id'] ent['display_order'] = 0 ent['page_id'] = 'matrix' ent['flags'] = 0 ent['shown_id'] = '' ent['name'] = ent['base_id.rawname'].replace(';', ' ') ent['subname'] = '' ent['subnames'] = [] ent['sub_id'] = '' ent['model_type'] = ent['base_id.model_type'] ent.setdefault('pack.page_id', '') ent['description'] = [] if ent.get('sub_id') and ent.get( 'vs.sec_id') and ent['sub_id'] != ent['vs.sec_id']: continue if ent.get('v.text_description'): ent['description'].append(ent['v.text_description']) ent['description'] = [x for x in ent['description'] if x] ent['disp_id'] = '' ent['image'] = '' ent['link'] = '' ent['pdir'] = mat['pic_dir'] ent['disp_format'] = mat['disp_format'] if not ent['pdir']: ent['pdir'] = pif.render.pic_dir if ent['model_type'] == 'MP': ent['image'] = pif.render.format_image_required( ent['mod_id'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_MAN, nopad=True) elif ent.get('v.picture_id'): ent['image'] = pif.render.format_image_required( ent['mod_id'] + '-' + ent['v.picture_id'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_VAR, nopad=True) elif ent.get('v.var'): ent['image'] = pif.render.format_image_required( ent['mod_id'] + '-' + ent['v.var'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_VAR, nopad=True) ent['range_id'] = range_id mat['ents'].setdefault(ent['range_id'], list()) mat['ents'][ent['range_id']].append(ent) pif.render.comment(' entry:', ent) for ent in pif.dbh.fetch_variations_by_category(cat_id): ent['var_id'] = ent['var'] range_id = ent['mod_id'] + '-' + ent['var_id'] if range_id in mat['ents'] or cat_id not in ent['category'].split( ' '): continue ent.setdefault('vs.ref_id', '') ent.setdefault('vs.sec_id', '') ent.setdefault('vs.ran_id', '') date_m = date_re.search(ent['date']) if date_m: self.dates.add(date_m.group('d')) ent['displayed_id'] = range_id ent['id'] = '' ent['section_id'] = mat['id'] ent['display_order'] = 0 ent['page_id'] = 'matrix' ent['flags'] = 0 ent['shown_id'] = '' ent['name'] = ent['base_id.rawname'].replace(';', ' ') ent['subname'] = '' ent['subnames'] = [] ent['sub_id'] = '' ent['model_type'] = ent['base_id.model_type'] ent.setdefault('pack.page_id', '') ent['description'] = [] if ent.get('sub_id') and ent.get( 'vs.sec_id') and ent['sub_id'] != ent['vs.sec_id']: continue if ent.get('text_description'): ent['description'].append(ent['text_description']) ent['description'] = [x for x in ent['description'] if x] ent['disp_id'] = '' ent['image'] = '' ent['link'] = '' ent['pdir'] = mat['pic_dir'] ent['disp_format'] = mat['disp_format'] if not ent['pdir']: ent['pdir'] = pif.render.pic_dir if ent['model_type'] == 'MP': ent['image'] = pif.render.format_image_required( ent['mod_id'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_MAN, nopad=True) elif ent.get('picture_id'): ent['image'] = pif.render.format_image_required( ent['mod_id'] + '-' + ent['picture_id'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_VAR, nopad=True) elif ent.get('var'): ent['image'] = pif.render.format_image_required( ent['mod_id'] + '-' + ent['var'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_VAR, nopad=True) ent['range_id'] = range_id mat['ents'].setdefault(ent['range_id'], list()) mat['ents'][ent['range_id']].append(ent) pif.render.comment(' entry:', ent) disp_order = 1 for range_id in sorted(mat['ents']): mat['ents'][range_id][0]['display_order'] = disp_order disp_order += 1 self.tables.append(mat)
def show_dir(pif, tform): if not os.path.exists(tform.tdir): raise useful.SimpleError('Path does not exist.') ostr = '<hr>\n' # dl, gl, ol, sl, xl = imglib.get_dir(tform.tdir) files = imglib.get_dir(tform.tdir, name_has=tform.has) ostr += show_list(files['titles']['dir'], tform.tdir, files['dir'], tform.view) if files['graf']: if tform.graf: ostr += '<h4>{} ({})</h4><div class="glist">\n'.format( files['titles']['graf'], len(files['graf'])) for f in files['graf']: perms = os.stat(tform.tdir + '/' + f)[stat.ST_MODE] if (perms & 4) == 0: ostr += '{}<br>\n'.format(f) elif tform.graf: ostr += pif.render.format_link( 'imawidget.cgi', '<img src="../{}/{}" border=0>{}'.format( tform.tdir, f, f), { 'd': tform.tdir, 'f': f, 'man': tform.mod, 'newvar': tform.var, 'cy': 0, 'suff': tform.suff }) else: ostr += '<a href="../{}">{}</a><br>\n'.format( tform.tdir + '/' + f, f) ostr += '</div><hr>\n' else: ostr += show_list(files['titles']['graf'], tform.tdir, files['graf'], tform.view) ostr += show_list(files['titles']['log'], tform.tdir, files['log'], tform.view) ostr += show_list(files['titles']['dat'], tform.tdir, files['dat'], tform.view) ostr += show_list(files['titles']['exe'], tform.tdir, files['exe'], tform.view) ostr += show_list(files['titles']['other'], tform.tdir, files['other'], tform.view) if pif.render.is_admin: ostr += '<a href="upload.cgi?d={}">{}</a>\n'.format( tform.tdir, pif.render.format_button('upload')) if files['graf']: ostr += '<form action="traverse.cgi">\n' + pif.create_token() ostr += '<a href="traverse.cgi?g=1&d={}">{}</a> or \n'.format( tform.tdir, pif.render.format_button('show all pictures')) ostr += 'Pattern <input type="text" name="p">\n' ostr += '<input type="hidden" name="d" value="{}">\n'.format( tform.tdir) ostr += pif.render.format_checkbox('du', [( '1', 'Dupes', )]) ostr += pif.render.format_checkbox('co', [( '1', 'Compact', )]) ostr += pif.render.format_checkbox('th', [( '1', 'Thumbs', )]) ostr += pif.render.format_checkbox('si', [( '1', 'Sized', )]) ostr += pif.render.format_checkbox('mr', [( '1', 'Recent', )]) if pif.render.is_admin: lty = [( 'nrm', 'Normal', ), ( 'shc', 'Categorize', ), ( 'mss', 'VMass', ), ( 'pms', 'PMass', ), ( 'shm', 'Shelve', ), ( 'suf', 'Resuffix', ), ( 'crd', 'Credit', )] ostr += '<br>' ostr += pif.render.format_radio('lty', lty, 'nrm') ostr += pif.render.format_button_input() ostr += '<br>\n' ostr += 'Size X <input type="text" name="sx">\n' ostr += 'Size Y <input type="text" name="sy">\n' ostr += '</form>\n' return ostr