示例#1
0
    def find_image_files(self, fnames, suffix=None, pdir=None, art=False):
        if isinstance(fnames, str):
            fnames = [fnames]
        if suffix is None:
            suffix = graphic_types
        elif isinstance(suffix, str):
            suffix = [suffix]
	pdir = useful.relpath(pdir if pdir else self.art_dir if art else self.pic_dir)
	retfiles = list()
	for fname in fnames:
	    for sfx in suffix:
		retfiles.extend(glob.glob(useful.relpath('.', pdir, fname + '.' + sfx))) # + glob.glob(os.path.join(pdir, fname.lower() + '.' + sfx)))
	return retfiles
示例#2
0
def count_boxes(pif):
    boxes = pif.dbh.fetch_castings_by_box('', '')
    box_styles = set()
    pr_count = im_count = 0
    for box in boxes:
        if 'alias.id' in box:
            box['id'] = box['alias.id']
        else:
            box['id'] = box['casting.id']

        if box['id'].startswith('M'):
	    print box
            continue

	box_styles.add(box['id'] + '-' + box['box_type.box_type'])
	pr_count += 2
	im_count += len(glob.glob(useful.relpath('.', config.IMG_DIR_BOX, 'x_' + box['id'] + '-' + box['box_type.box_type'] + box['box_type.pic_id'] + '*.jpg')))

    for box in box_styles:
	if pif.render.find_image_path(box, pdir=config.IMG_DIR_BOX, prefix=mbdata.IMG_SIZ_SMALL):
	    im_count += 1
	if pif.render.find_image_path(box, pdir=config.IMG_DIR_BOX, prefix=mbdata.IMG_SIZ_PETITE):
	    im_count += 1
	if pif.render.find_image_path(box, pdir=config.IMG_DIR_BOX, prefix=mbdata.IMG_SIZ_MEDIUM):
	    im_count += 1
	pr_count += 1

    return pr_count, im_count
示例#3
0
def find_boxes(pif):
    series = pif.form.get_str('series')
    style = pif.form.get_str('style')
    if style == 'all':
	style = ''
    start = pif.form.get_int('start', 1)
    end = pif.form.get_int('end', start)
    boxes = dict()
    for box in pif.dbh.fetch_castings_by_box(series, style):
        box['id'] = box['alias.id'] if box.get('alias.id') else box['casting.id']
        if (series and box['base_id.model_type'] != series) or \
		(style and (style != box['box_type.box_type'][0])) or \
		(int(box['id'][2:4]) < start) or \
		((end and int(box['id'][2:4]) > end) or (not end and int(box['id'][2:4]) != start)):
	    continue
	pic_name = ('x_%s-%s%s' % (box['box_type.mod_id'], box['box_type.box_type'][0], box['box_type.pic_id'])).lower()
	is_pic = int(os.path.exists(useful.relpath('.', config.IMG_DIR_BOX, pic_name + '.jpg')))
	sortid = box['id'][2:4] + box['id'][0:2] + box['id'][4:] + box['box_type.box_type'][0]
	front = ' / '.join(
		box_lookup('box_type', box['box_type.box_type']) +
		box_lookup('bottom', box['box_type.bottom']) +
		box_lookup('additional_text', box['box_type.additional_text']) +
		[box['box_type.notes']])
	if sortid in boxes:
	    boxes[sortid]['count'] += 1
	    boxes[sortid]['pics'] += is_pic
	    if front not in boxes[sortid]['fronts']:
		boxes[sortid]['fronts'].append(front)
	    continue
	box['count'] = 1
	box['pics'] = is_pic
	box['fronts'] = [front]
	boxes[sortid] = box
    return boxes
示例#4
0
def sets_main(pif):
    pif.render.print_html()

    if pif.form.has('page'):
        setfile = SetFile(useful.relpath(config.SRC_DIR, useful.make_alnum(pif.form.get_str('page')) + '.dat'))
        return do_set(pif, setfile, pif.form.get_str('set'))
    else:
        return select_set(pif)
示例#5
0
def show_script(pif, tform):
    if tform.mss:
	do_var_masses(pif, tform)
	return
    if tform.pms:
	do_prod_masses(pif, tform)
	return
    if tform.rsuf:
	for fn, suf in tform.rsfx:
	    root, ext = os.path.splitext(fn)
	    if '-' in root:
		root = root[:root.find('-')]
	    nfn = root + '-' + suf + ext
	    print fn, root + '-' + suf + ext, '<br>'
	    useful.file_mover(os.path.join(tform.tdir, fn), os.path.join(tform.tdir, nfn), mv=True, inc=True)
	return
    if tform.cred:
	for fn, cred in pif.form.get_list(start='cred.'):
	    print fn, cred, '<br>'
	    pif.dbh.write_photo_credit(cred, tform.tdir, fn, verbose=False)
	return
    rend = dict(tform.renl)
    print '<pre>'
    for ren in tform.renl:
        fn = ren[1]
        if '.' not in fn:
            fn += ren[0][ren[0].rfind('.'):]
        if not os.path.exists(fn):
            useful.file_mover(os.path.join(tform.tdir, ren[0]), os.path.join(tform.tdir, fn), mv=True, inc=True)
        else:
            print '#ren', os.path.join(tform.tdir, ren[0], os.path.join(tform.tdir, fn))
    for lb in tform.libl:
        dest = lb[1]  # we might have renamed this...
        if lb[0] in rend:
            lb[0] = rend[lb[0]]
        if not os.path.exists(useful.relpath('.', config.LIB_DIR, tform.pre, dest)):
            os.mkdir(useful.relpath('.', config.LIB_DIR, tform.pre, dest))
        useful.file_mover(os.path.join(tform.tdir, lb[0]), useful.relpath('.', config.LIB_DIR, tform.pre, dest, lb[0]), mv=True, inc=True)
    for rm in tform.rml:
        if os.path.exists(os.path.join(tform.tdir, rm)):
            useful.file_mover(os.path.join(tform.tdir, rm), None, mv=True)
    for mv in tform.mvl:
        fsp = mv.split(' ')
        if os.path.exists(os.path.join(tform.tdir, fsp[0])):
            useful.file_mover(os.path.join(tform.tdir, fsp[0]), os.path.join(tform.tdir, fsp[1]), mv=True, inc=True)
    print '</pre>'
示例#6
0
def sets_main(pif):
    pif.render.print_html()

    if pif.form.has('page'):
        setfile = SetFile(useful.relpath(config.SRC_DIR, useful.make_alnum(pif.form.get_str('page')) + '.dat'))
        return do_set(pif, setfile, pif.form.get_str('set'))
    else:
        return select_set(pif)
示例#7
0
def show_script(pif, tform):
    if tform.mss:
	do_var_masses(pif, tform)
	return
    if tform.pms:
	do_prod_masses(pif, tform)
	return
    if tform.rsuf:
	for fn, suf in tform.rsfx:
	    root, ext = os.path.splitext(fn)
	    if '-' in root:
		root = root[:root.find('-')]
	    nfn = root + '-' + suf + ext
	    print fn, root + '-' + suf + ext, '<br>'
	    useful.file_mover(os.path.join(tform.tdir, fn), os.path.join(tform.tdir, nfn), mv=True, inc=True)
	return
    if tform.cred:
	for fn, cred in pif.form.get_list(start='cred.'):
	    print fn, cred, '<br>'
	    pif.render.message('Credit added: ', pif.dbh.write_photo_credit(cred, tform.tdir, fn, verbose=False))
	return
    rend = dict(tform.renl)
    print '<pre>'
    for ren in tform.renl:
        fn = ren[1]
        if '.' not in fn:
            fn += ren[0][ren[0].rfind('.'):]
        if not os.path.exists(fn):
            useful.file_mover(os.path.join(tform.tdir, ren[0]), os.path.join(tform.tdir, fn), mv=True, inc=True)
        else:
            print '#ren', os.path.join(tform.tdir, ren[0], os.path.join(tform.tdir, fn))
    for lb in tform.libl:
        dest = lb[1]  # we might have renamed this...
        if lb[0] in rend:
            lb[0] = rend[lb[0]]
	useful.make_dir(useful.relpath('.', config.LIB_DIR, tform.pre, dest), 0775)
        useful.file_mover(os.path.join(tform.tdir, lb[0]), useful.relpath('.', config.LIB_DIR, tform.pre, dest, lb[0]), mv=True, inc=True)
    for rm in tform.rml:
        if os.path.exists(os.path.join(tform.tdir, rm)):
            useful.file_mover(os.path.join(tform.tdir, rm), None, mv=True)
    for mv in tform.mvl:
        fsp = mv.split(' ')
        if os.path.exists(os.path.join(tform.tdir, fsp[0])):
            useful.file_mover(os.path.join(tform.tdir, fsp[0]), os.path.join(tform.tdir, fsp[1]), mv=True, inc=True)
    print '</pre>'
示例#8
0
def get_pic_roots(mod_id, box_style):
    picroots = glob.glob(
        useful.relpath('.', config.IMG_DIR_BOX, ('[scm]_' + mod_id + '-' +
                                                 box_style + '?.jpg').lower()))
    picroots = list(
        set([(mod_id + '-' + box_style).lower()] +
            [x[x.rfind('/') + 3:-4] for x in picroots]))
    picroots.sort()
    return picroots
示例#9
0
    def find_image_file(self, fnames, vars=None, nobase=False, prefix='', suffix=None, largest=None, preferred=None, pdir=None, art=False):
	self.comment('START find_image_file', fnames, 'vars', vars, 'nobase', nobase, 'prefix', prefix, 'suffix', suffix, 'largest', largest, 'preferred', prefix, 'pdir', pdir, 'art', art)
        if not fnames:
            self.comment('find_image_file ret', '')
            return ('', '')
        elif isinstance(fnames, str):
            fnames = [fnames]

	suffix = graphic_types if suffix is None else [suffix] if isinstance(suffix, str) else suffix

        if largest:  # overrides previous setting of prefixes.
            prefix = list(reversed(mbdata.image_size_types))
            if largest in prefix:
                prefix = prefix[prefix.index(largest):]
        elif isinstance(prefix, str):
            prefix = [prefix]

	pdir = useful.relpath(pdir if pdir else self.art_dir if art else self.pic_dir)
	pdirvar = useful.relpath(pdir, 'var')

	base = [] if nobase else ['']
	vars = base if not vars else [vars] + base if isinstance(vars, str) else vars + base

        self.comment("find_image_file", 'f:', fnames, 'v:', vars, 'p:', prefix, 's:', suffix, 'd:', pdir)
	fimg = fdir = ''
        for var in vars:
            for fname in fnames:
                fname = useful.clean_name(fname.replace('/', '_'))
#               if not fname:
#                   continue
                if fname.find('.') >= 0:
                    csuffix = [fname[fname.rfind('.') + 1:]]
                    fname = fname[:fname.rfind('.')]
                else:
                    csuffix = suffix

                for pfx in prefix + ['']:
		    rdir, rimg = self.find_prefixed_image(fname, pdir, pdirvar, pfx, csuffix, var)
		    if rimg:
			if not preferred or preferred == pfx:
			    return rdir, rimg
			fdir, fimg = rdir, rimg
	self.comment('find_image_file ret', fdir, fimg)
	return fdir, fimg
示例#10
0
def cars_main(pif):
    pif.render.print_html()

    db = CarsFile(
        useful.relpath(config.SRC_DIR,
                       pif.form.get_str('page', 'cars') + '.dat'))

    print(pif.render.format_head())
    render_cars(pif, db)
    print(pif.render.format_tail())
示例#11
0
def blister(pif):
    pif.render.print_html()
    #global pagename
    #pagename = pif.form.get_str('page', 'blister')

    dblist = bfiles.SimpleFile(useful.relpath(config.SRC_DIR, pif.page_name + '.dat'))

    print pif.render.format_head()
    useful.header_done()
    print do_tree_page(pif, dblist)
    print pif.render.format_tail()
示例#12
0
def blister(pif):
    pif.render.print_html()
    #global pagename
    #pagename = pif.form.get_str('page', 'blister')

    dblist = bfiles.SimpleFile(
        useful.relpath(config.SRC_DIR, pif.page_name + '.dat'))

    print pif.render.format_head()
    useful.header_done()
    print do_tree_page(pif, dblist)
    print pif.render.format_tail()
示例#13
0
def main(pif):
    pif.render.print_html()
    print pif.render.format_head()
    useful.header_done()
    manf = MannoFile(useful.relpath(config.SRC_DIR, 'tomica.dat'))
    mans = manf.dictlist
    if pif.form.has('num'):
        print '<meta http-equiv="refresh" content="0;url=single.cgi?id=%s">' % pif.form.get_str('num')
        return
    else:
        run_file(pif, manf, year=pif.form.get_str('year'))
        #print pif.render.format_matrix(llineup)
    print pif.render.format_tail()
示例#14
0
def grab_list(ll, fl):
    for url in fl:
        fn = url[url.rfind('/') + 1:]
        libdir = useful.relpath('.', config.LIB_MAN_DIR, ll['link_line.page_id'][7:].lower())
        if not os.path.exists(libdir):
            errors.append((ll, url))
        sfn = os.path.join(libdir, fn)
        dot = sfn.rfind('.')
        sfn = sfn[:dot] + sfn[dot:].lower()
        if os.path.exists(sfn):
            print sfn, 'already exists'
        else:
            img = grab_page(ll['pth'] + '/' + url)
            save(ll, sfn, img)
示例#15
0
def grab_list(ll, fl):
    for url in fl:
        fn = url[url.rfind('/') + 1:]
        libdir = useful.relpath('.', config.LIB_MAN_DIR, ll['link_line.page_id'][7:].lower())
        if not os.path.exists(libdir):
            errors.append((ll, url))
        sfn = os.path.join(libdir, fn)
        dot = sfn.rfind('.')
        sfn = sfn[:dot] + sfn[dot:].lower()
        if os.path.exists(sfn):
            print sfn, 'already exists'
        else:
            img = grab_page(ll['pth'] + '/' + url)
            save(ll, sfn, img)
示例#16
0
def main(pif):
    pif.render.print_html()
    print(pif.render.format_head())
    useful.header_done()
    manf = MannoFile(useful.relpath(config.SRC_DIR, 'tomica.dat'))
    # mans = manf.dictlist
    if pif.form.has('num'):
        print('<meta http-equiv="refresh" content="0;url=single.cgi?id=%s">' %
              pif.form.get_str('num'))
        return
    else:
        run_file(pif, manf, year=pif.form.get_str('year'))
        # print(pif.render.format_matrix(llineup))
    print(pif.render.format_tail())
示例#17
0
    def format_image_list(self, fn, alt='', wc='', prefix='', suffix='jpg', pdir=None):
        self.comment('format_image_list', fn, alt, wc, prefix, suffix, pdir)
	pdir = useful.relpath(pdir if pdir else self.pic_dir)
        if isinstance(suffix, str):
            suffix = [suffix]
        if isinstance(prefix, str):
            prefix = [prefix]
        imgs = list()

        for suf in suffix:
            for pref in prefix:
                orig = (pref + fn + '.' + suf)
                patt = (pref + fn + wc + '.' + suf)

                for fname in [orig] + useful.read_dir(patt, pdir):
                    img = self.fmt_img_src(pdir + '/' + fname, alt)
                    if img:
                        imgs.append(img)
        return imgs
示例#18
0
def find_boxes(pif):
    series = pif.form.get_str('series')
    style = pif.form.get_str('style')
    if style == 'all':
        style = ''
    start = pif.form.get_int('start', 1)
    end = pif.form.get_int('end', start)
    boxes = dict()
    for box in pif.dbh.fetch_castings_by_box(series, style):
        box['id'] = box['alias.id'] if box.get(
            'alias.id') else box['casting.id']
        if (series and box['base_id.model_type'] != series) or \
  (style and (style != box['box_type.box_type'][0])) or \
  (int(box['id'][2:4]) < start) or \
  ((end and int(box['id'][2:4]) > end) or (not end and int(box['id'][2:4]) != start)):
            continue
        pic_name = ('x_%s-%s%s' %
                    (box['box_type.mod_id'], box['box_type.box_type'][0],
                     box['box_type.pic_id'])).lower()
        is_pic = int(
            os.path.exists(
                useful.relpath('.', config.IMG_DIR_BOX, pic_name + '.jpg')))
        sortid = box['id'][2:4] + box['id'][0:2] + box['id'][4:] + box[
            'box_type.box_type'][0]
        front = ' / '.join(
            box_lookup('box_type', box['box_type.box_type']) +
            box_lookup('bottom', box['box_type.bottom']) +
            box_lookup('additional_text', box['box_type.additional_text']) +
            [box['box_type.notes']])
        if sortid in boxes:
            boxes[sortid]['count'] += 1
            boxes[sortid]['pics'] += is_pic
            if front not in boxes[sortid]['fronts']:
                boxes[sortid]['fronts'].append(front)
            continue
        box['count'] = 1
        box['pics'] = is_pic
        box['fronts'] = [front]
        boxes[sortid] = box
    return boxes
示例#19
0
def count_boxes(pif):
    boxes = pif.dbh.fetch_castings_by_box('', '')
    box_styles = set()
    pr_count = im_count = 0
    for box in boxes:
        if 'alias.id' in box:
            box['id'] = box['alias.id']
        else:
            box['id'] = box['casting.id']

        if box['id'].startswith('M'):
            print box
            continue

        box_styles.add(box['id'] + '-' + box['box_type.box_type'])
        pr_count += 2
        im_count += len(
            glob.glob(
                useful.relpath(
                    '.', config.IMG_DIR_BOX,
                    'x_' + box['id'] + '-' + box['box_type.box_type'] +
                    box['box_type.pic_id'] + '*.jpg')))

    for box in box_styles:
        if pif.render.find_image_path(box,
                                      pdir=config.IMG_DIR_BOX,
                                      prefix=mbdata.IMG_SIZ_SMALL):
            im_count += 1
        if pif.render.find_image_path(box,
                                      pdir=config.IMG_DIR_BOX,
                                      prefix=mbdata.IMG_SIZ_PETITE):
            im_count += 1
        if pif.render.find_image_path(box,
                                      pdir=config.IMG_DIR_BOX,
                                      prefix=mbdata.IMG_SIZ_MEDIUM):
            im_count += 1
        pr_count += 1

    return pr_count, im_count
示例#20
0
 def read_dat(fn):
     dat = open(useful.relpath(config.SRC_DIR, fn + '.dat')).readlines()
     dat = filter(lambda x: x and not x.startswith('#'), [ln.strip() for ln in dat])
     return main_fn(dat)
示例#21
0
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)
示例#22
0
def show_left_bar_content(pif, model, ref, pic, pdir, lm_pic_id,
                          raw_variations):
    mod_id = model['id']
    links = []
    if pif.is_allowed('a'):  # pragma: no cover
        links.append('<a href="vars.cgi?recalc=1&mod=%s">Recalculate</a>' %
                     mod_id)
        links.append('<a href="%s">Casting</a>' %
                     pif.dbh.get_editor_link('casting', {'id': mod_id}))
        links.append(
            '<a href="%s">AttrPics</a>' %
            pif.dbh.get_editor_link('attribute_picture', {'mod_id': mod_id}))
        links.append('<a href="mass.cgi?type=related&mod_id=%s">Relateds</a>' %
                     mod_id)
        if ref.startswith('year.'):
            links.append('<a href="%s">Lineup Model</a>' %
                         pif.dbh.get_editor_link('lineup_model', {
                             'year': ref[5:],
                             'mod_id': mod_id
                         }))
        elif ref.startswith('matrix.'):
            links.append('<a href="%s">Matrix Model</a>' %
                         pif.dbh.get_editor_link('matrix_model', {
                             'page_id': ref,
                             'mod_id': id
                         }))
        elif ref.startswith('packs.'):
            links.append(
                '<a href="%s">Pack Model</a>' %
                pif.dbh.get_editor_link('pack_model', {
                    'pack_id': pif.form.get_str('sub'),
                    'mod_id': mod_id
                }))
        links.append('<a href="vars.cgi?list=1&mod=%s">Variations</a>' %
                     mod_id)
        links.append('<a href="vars.cgi?vdet=1&mod=%s">Details</a>' % mod_id)
        links.append('<a href="vsearch.cgi?ask=1&id=%s">Search</a>' % mod_id)
        links.append('<a href="pics.cgi?m=%s">Pictures</a>' % mod_id.lower())
        links.append('<a href="edlinks.cgi?page=single.%s">Links</a>' % mod_id)
    if os.path.exists(
            useful.relpath('.', config.LIB_MAN_DIR,
                           mod_id.replace('/', '_').lower())):
        if pif.is_allowed('v'):  # pragma: no cover
            links.append('<a href="traverse.cgi?d=%s">Library</a>' %
                         useful.relpath('.', config.LIB_MAN_DIR,
                                        mod_id.replace('/', '_').lower()))
        if pif.is_allowed('a'):  # pragma: no cover
            links.append('<a href="upload.cgi?d=%s&m=%s">Library Upload</a>' %
                         (useful.relpath('.', config.LIB_MAN_DIR,
                                         mod_id.replace('/', '_').lower()),
                          mod_id.replace('/', '_').lower()))

    ostr = ''
    if pif.is_allowed('a'):  # pragma: no cover
        #<i class="fas fa-star white"></i>
        #<i class="fas fa-star-half-o white"></i>
        #<i class="fas fa-star-o white"></i>
        prodstar = 'fa-star-o black'
        if pic:
            links.append('')
            prodstar = 'fa-star white'
            prod = pic
            prod += ' <a href="upload.cgi?d=%s&n=%s&c=%s&link=%s"><i class="fas fa-upload"></i></a>' % (
                pdir.replace('pic',
                             'lib'), pic, pic, urllib.quote(pif.request_uri))
            prodpic = pif.render.find_image_path(pic, pdir=pdir)
            if lm_pic_id:
                prod += ' <a href="%s&useprev=2"><i class="fas fa-step-backward red"></i></a>' % pif.request_uri
            elif prodpic:
                x, y = imglib.get_size(prodpic)
                if x > 400:
                    prodstar = 'fa-star yellow'
                elif x == 400:
                    prodstar = 'fa-star black'
                else:
                    prodstar = 'fa-star red'
                prod += ' <a href="imawidget.cgi?act=1&d=./%s&f=%s&delete=1"><i class="fas fa-remove"></i></a>' % (
                    pdir, prodpic[prodpic.rfind('/') + 1:])
            else:
                prod += ' <a href="%s&useprev=1"><i class="fas fa-step-backward"></i></a>' % pif.request_uri
            links.append(prod)
        links.append('')
        vfl = pif.dbh.fetch_variation_files(mod_id)
        for vf in vfl if vfl else [{
                'mod_id': mod_id,
                'imported_from': 'importer'
        }]:
            links.append(
                '<a href="vedit.cgi?d=src/mbxf&m=%(mod_id)s&f=%(imported_from)s">%(imported_from)s</a>'
                % vf)
        var_pics, var_texts = show_list_var_pics(pif, mod_id)
        ostr += '<br>\n'.join(var_pics) + '<p>\n'
        fmt_bad, _, _ = pif.dbh.check_description_formatting(mod_id)
        ostr += '<i class="fas fa-times red"></i>' if fmt_bad else '<i class="fas fa-check green"></i>'
        ostr += '<br>'
        for i_vt in range(1, len(var_texts)):
            vt = var_texts[i_vt]
            ostr += '<i title="%s" class="fas fa-star%s"></i>\n' % (
                mbdata.model_texts[i_vt - 1], '-o gray'
                if not model['format_' + mbdata.desc_attributes[i_vt - 1]] else
                (' green' if vt == var_texts[0] else
                 (' red' if not vt else ' yellow')))
        ostr += '<p>\n'
        ostr += '<i class="fas %s"></i><p>\n' % prodstar
        var_ids = [x['v.var'] for x in raw_variations]
        var_ids.sort()
        for var in var_ids:
            ostr += '<a href="vars.cgi?mod=%s&var=%s&edit=1">%s</a>\n' % (
                mod_id, var, var)
            if var:
                for sz in mbdata.image_size_types:
                    if os.path.exists(
                            useful.relpath(
                                '.', config.IMG_DIR_VAR, sz + '_' + mod_id +
                                '-' + var + '.jpg').lower()):
                        ostr += sz.upper() + ' '
                ostr += '<a href="vars.cgi?mod=%s&var=%s"><i class="fas fa-edit"></i></a>\n' % (
                    mod_id, var)
                ostr += pif.render.format_link(
                    'upload.cgi?d=%s&m=%s&v=%s&l=1&c=%s+variation+%s' %
                    (useful.relpath('.', config.LIB_MAN_DIR,
                                    mod_id.lower()), mod_id, var, mod_id, var),
                    '<i class="fas fa-upload"></i>') + '\n'
                ostr += pif.render.format_link(
                    'traverse.cgi?g=1&d=%s&man=%s&var=%s' %
                    (useful.relpath('.', config.LIB_MAN_DIR, mod_id.lower()),
                     mod_id, var), '<i class="fas fa-bars"></i>') + '\n'
            ostr += '<br>\n'
    ostr = '<br>\n'.join(links) + '<p>\n' + ostr
    return ostr
示例#23
0
    def action(self, pif, tdir=None, fn=None):
        log_action = False
        if not fn:
            fn = self.fn
        if not tdir:
            tdir = self.tdir
        ret = {'fn': fn, 'dir': tdir, 'act': True}
        from_path = os.path.join(tdir, fn)
        to_dir = to_name = ''
        if self.delete:
            useful.file_delete(from_path)
        elif self.archive:
            useful.file_mover(from_path,
                              os.path.join(tdir, 'archive', fn),
                              mv=True)
            ret['fn'] = ''
        elif self.fixed:
            useful.file_mover(from_path,
                              os.path.join(tdir, 'fixed', fn),
                              mv=True)
            ret['fn'] = ''
        elif self.rename:
            if not self.nname:
                useful.warn('What? (rename, no name)')
            else:
                to_dir = tdir
                to_name = self.nname
        elif self.lib:
            if not self.man:
                useful.warn('What? (lib, no man)')
            elif not os.path.exists(
                    useful.relpath('.' + config.LIB_MAN_DIR, self.man)):
                #		man2 = pif.dbh.fetch_alias(self.man)
                #		if not man2:
                useful.warn('bad destination')


#		else:
#		    useful.file_mover(from_path, os.path.join('.' + config.LIB_MAN_DIR, man2['ref_id'].lower(), fn), mv=self.mv, ov=self.ov)
            else:
                to_dir = useful.relpath('.' + config.LIB_MAN_DIR, self.man)
                to_name = self.nname
        elif self.mvbin:
            if not os.path.exists(os.path.join('lib', self.cat)):
                useful.warn('bad destination')
            else:
                to_dir = os.path.join('lib', self.cat)
                to_name = self.nname
        elif self.selcat:
            if not (self.man or self.nname) or not self.dest:
                useful.warn('What? (selcat, no name or dest)')
            else:
                ddir = self.dest
                dnam = self.man if self.man else self.nname
                if self.pref:
                    dnam = self.pref + '_' + dnam
                    if self.ptype == 't':
                        ddir = '.' + config.IMG_DIR_ADD
                        if self.suff:
                            dnam += '-' + self.suff
                if dnam:
                    to_name = dnam.lower() + '.jpg'
                    to_dir = ddir
                log_action = True
        elif self.select:
            inc = self.inc
            if not self.man:
                #self.man = tdir[tdir.rfind('/') + 1:]
                useful.warn('Huh? (select, no man)')
            else:
                ddir = '.' + config.IMG_DIR_MAN
                dnam = self.man
                if self.var:
                    ddir = '.' + config.IMG_DIR_VAR
                    dnam = dnam + '-' + self.var
                    if self.pref:
                        dnam = self.pref + '_' + dnam
                elif self.pref:
                    if self.pref != 'n':
                        dnam = self.pref + '_' + dnam
                    if self.ptype == 't':
                        ddir = '.' + config.IMG_DIR_ADD
                        if self.suff:
                            dnam += '-' + self.suff
                        self.inc = True
                else:
                    useful.warn("What? (select, no var or pref)")
                    dnam = ''
                if dnam:
                    to_name = dnam.lower() + '.jpg'
                    to_dir = ddir
                log_action = True
        else:
            ret['act'] = False
        if to_dir:
            useful.file_mover(from_path,
                              os.path.join(to_dir, to_name),
                              mv=self.mv,
                              ov=self.ov,
                              inc=self.inc)
            ret['fn'] = to_name
            ret['dir'] = to_dir
            if log_action:
                title = pif.form.get_str('title', to_name)
                url = 'http://www.bamca.org/' + os.path.join(to_dir, to_name)
                link = 'http://www.bamca.org/' + self.link
                useful.write_message(
                    'Post to Tumblr: ',
                    tumblr.tumblr(pif).create_photo(caption=to_name,
                                                    source=url,
                                                    link=link))
            pif.dbh.write_photo_credit(pif.form.get_str('credit'), to_dir,
                                       to_name)
        return ret
示例#24
0
 def read_dat(fn):
     dat = open(useful.relpath(config.SRC_DIR, fn + '.dat')).readlines()
     dat = filter(lambda x: x and not x.startswith('#'),
                  [ln.strip() for ln in dat])
     return main_fn(dat)
示例#25
0
def fix_files(page_id):
    dn = useful.relpath('.', config.LIB_MAN_DIR, page_id[7:].lower())
    os.system('sudo chown bamca:www %s' % dn)
    os.system('sudo chmod 775 %s' % dn)
    os.system('sudo chown bamca:www %s/*.*' % dn)
    os.system('sudo chmod 664 %s/*.*' % dn)
示例#26
0
def fix_files(page_id):
    dn = useful.relpath('.', config.LIB_MAN_DIR, page_id[7:].lower())
    os.system('sudo chown bamca:www %s' % dn)
    os.system('sudo chmod 775 %s' % dn)
    os.system('sudo chown bamca:www %s/*.*' % dn)
    os.system('sudo chmod 664 %s/*.*' % dn)
示例#27
0
def get_pic_roots(mod_id, box_style):
    picroots = glob.glob(useful.relpath('.', config.IMG_DIR_BOX, ('[scm]_' + mod_id + '-' + box_style + '?.jpg').lower()))
    picroots = list(set([(mod_id + '-' + box_style).lower()] + [x[x.rfind('/') + 3:-4] for x in picroots]))
    picroots.sort()
    return picroots
示例#28
0
 def action(self, pif, tdir=None, fn=None):
     log_action = False
     if not fn:
         fn = self.fn
     if not tdir:
         tdir = self.tdir
     ret = {'fn': fn, 'dir': tdir, 'act': True}
     from_path = os.path.join(tdir, fn)
     to_dir = to_name = ''
     if self.delete:
         useful.file_delete(from_path)
     elif self.trash:
         useful.file_mover(from_path,
                           os.path.join(
                               '.' + config.TRASH_DIR,
                               from_path[from_path.rfind('/') + 1:]),
                           mv=True,
                           inc=True,
                           trash=False)
     elif self.archive:
         useful.file_mover(from_path,
                           os.path.join(tdir, 'archive', fn),
                           mv=True)
         ret['fn'] = ''
     elif self.spam:
         path = '../spam' if os.path.exists(os.path.join(
             tdir, '..', 'spam')) else 'spam'
         useful.file_mover(from_path, os.path.join(tdir, path, fn), mv=True)
         ret['fn'] = ''
     elif self.fixed:
         useful.file_mover(from_path,
                           os.path.join(tdir, 'fixed', fn),
                           mv=True)
         ret['fn'] = ''
     elif self.rename:
         if not self.nname:
             useful.warn('What? (rename, no name)')
         else:
             to_dir = tdir
             to_name = self.nname
     elif self.lib:
         if not self.man:
             useful.warn('What? (lib, no man)')
         elif not os.path.exists(
                 useful.relpath('.' + config.LIB_MAN_DIR, self.man)):
             # man2 = pif.dbh.fetch_alias(self.man)
             # if not man2:
             useful.warn('bad destination')
             # else:
             #     useful.file_mover(from_path, os.path.join('.' + config.LIB_MAN_DIR, man2['ref_id'].lower(), fn),
             #                       mv=self.mv, ov=self.ov)
         else:
             to_dir = useful.relpath('.' + config.LIB_MAN_DIR, self.man)
             to_name = self.nname
     elif self.mvbin:
         if not os.path.exists(os.path.join('lib', self.cat)):
             useful.warn('bad destination')
         else:
             to_dir = os.path.join('lib', self.cat)
             to_name = self.nname
     elif self.selcat:
         if not (self.man or self.nname) or not self.dest:
             useful.warn('What? (selcat, no name or dest)')
         else:
             ddir = self.dest
             dnam = self.man if self.man else self.nname
             if self.pref:
                 dnam = self.pref + '_' + dnam
                 if self.ptype == 't':
                     ddir = '.' + config.IMG_DIR_ADD
                     if self.suff:
                         dnam += '-' + self.suff
             if dnam:
                 to_name = dnam.lower() + '.jpg'
                 to_dir = ddir
             log_action = True
     elif self.select:
         # inc = self.inc
         if not self.man:
             # self.man = tdir[tdir.rfind('/') + 1:]
             useful.warn('Huh? (select, no man)')
         else:
             ddir = '.' + config.IMG_DIR_MAN
             dnam = self.man
             if self.var:
                 ddir = '.' + config.IMG_DIR_VAR
                 dnam = dnam + '-' + self.var
                 if self.pref:
                     dnam = self.pref + '_' + dnam
             elif self.pref:
                 if self.pref != 'n':
                     dnam = self.pref + '_' + dnam
                 if self.ptype == 't':
                     ddir = '.' + config.IMG_DIR_ADD
                     if self.suff:
                         dnam += '-' + self.suff
                     self.inc = True
             else:
                 useful.warn("What? (select, no var or pref)")
                 dnam = ''
             if dnam:
                 to_name = dnam.lower() + '.jpg'
                 to_dir = ddir
             log_action = True
     else:
         ret['act'] = False
     if to_dir:
         cred = pif.form.get_str('credit')
         if cred:
             photog = pif.dbh.fetch_photographer(cred)
             if not photog or not photog.flags & config.FLAG_PHOTOGRAPHER_PRIVATE:
                 cred = ''
         useful.file_mover(from_path,
                           os.path.join(to_dir, to_name),
                           mv=self.mv,
                           ov=self.ov,
                           inc=self.inc)
         ret['fn'] = to_name
         ret['dir'] = to_dir
         if log_action and self.tumblr:
             title = pif.form.get_str('title', to_name)
             url = pif.secure_prod + os.path.join(to_dir, to_name)
             link = pif.secure_prod + self.link
             title = to_name
             if cred:
                 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, to_dir, to_name))
     return ret
示例#29
0
    def fmt_img_file_check(self, pdir, fn):
        self.comment("fmt_img_check", pdir, fn)
	return fn if useful.is_good(useful.relpath('.', pdir, fn), v=self.verbose) else ''
示例#30
0
def clean_dir(page_id):
    ln = useful.relpath('.', config.LIB_DIR, '0files')
    dn = useful.relpath('.', config.LIB_MAN_DIR, page_id.lower())
    print "attempting to clean", page_id
    do_top_dir(ln, dn)
示例#31
0
    def action(self, pif, tdir=None, fn=None):
	log_action = False
	if not fn:
	    fn = self.fn
	if not tdir:
	    tdir = self.tdir
	ret = {'fn': fn, 'dir': tdir, 'act': True}
	from_path = os.path.join(tdir, fn)
	to_dir = to_name = ''
	if self.delete:
	    useful.file_delete(from_path)
	elif self.trash:
	    useful.file_mover(from_path, os.path.join('.' + config.TRASH_DIR, from_path[from_path.rfind('/') + 1:]), mv=True, inc=True, trash=False)
	elif self.archive:
	    useful.file_mover(from_path, os.path.join(tdir, 'archive', fn), mv=True)
	    ret['fn'] = ''
	elif self.spam:
	    path = '../spam' if os.path.exists(os.path.join(tdir, '..', 'spam')) else 'spam'
	    useful.file_mover(from_path, os.path.join(tdir, path, fn), mv=True)
	    ret['fn'] = ''
	elif self.fixed:
	    useful.file_mover(from_path, os.path.join(tdir, 'fixed', fn), mv=True)
	    ret['fn'] = ''
	elif self.rename:
	    if not self.nname:
		useful.warn('What? (rename, no name)')
	    else:
		to_dir = tdir
		to_name = self.nname
	elif self.lib:
	    if not self.man:
		useful.warn('What? (lib, no man)')
	    elif not os.path.exists(useful.relpath('.' + config.LIB_MAN_DIR, self.man)):
#		man2 = pif.dbh.fetch_alias(self.man)
#		if not man2:
		    useful.warn('bad destination')
#		else:
#		    useful.file_mover(from_path, os.path.join('.' + config.LIB_MAN_DIR, man2['ref_id'].lower(), fn), mv=self.mv, ov=self.ov)
	    else:
		to_dir = useful.relpath('.' + config.LIB_MAN_DIR, self.man)
		to_name = self.nname
	elif self.mvbin:
	    if not os.path.exists(os.path.join('lib', self.cat)):
		useful.warn('bad destination')
	    else:
		to_dir = os.path.join('lib', self.cat)
		to_name = self.nname
	elif self.selcat:
	    if not (self.man or self.nname) or not self.dest:
		useful.warn('What? (selcat, no name or dest)')
	    else:
		ddir = self.dest
		dnam = self.man if self.man else self.nname
		if self.pref:
		    dnam = self.pref + '_' + dnam
		    if self.ptype == 't':
			ddir = '.' + config.IMG_DIR_ADD
			if self.suff:
			    dnam += '-' + self.suff
		if dnam:
		    to_name = dnam.lower() + '.jpg'
		    to_dir = ddir
		log_action = True
	elif self.select:
	    inc = self.inc
	    if not self.man:
		#self.man = tdir[tdir.rfind('/') + 1:]
		useful.warn('Huh? (select, no man)')
	    else:
		ddir = '.' + config.IMG_DIR_MAN
		dnam = self.man
		if self.var:
		    ddir = '.' + config.IMG_DIR_VAR
		    dnam = dnam + '-' + self.var
		    if self.pref:
			dnam = self.pref + '_' + dnam
		elif self.pref:
		    if self.pref != 'n':
			dnam = self.pref + '_' + dnam
		    if self.ptype == 't':
			ddir = '.' + config.IMG_DIR_ADD
			if self.suff:
			    dnam += '-' + self.suff
			self.inc = True
		else:
		    useful.warn("What? (select, no var or pref)")
		    dnam = ''
		if dnam:
		    to_name = dnam.lower() + '.jpg'
		    to_dir = ddir
		log_action = True
	else:
	    ret['act'] = False
	if to_dir:
	    cred = pif.form.get_str('credit')
	    if cred:
		photog = pif.dbh.fetch_photographer(cred)
		if not photog or not photog.flags & config.FLAG_PHOTOGRAPHER_PRIVATE:
		    cred = ''
	    useful.file_mover(from_path, os.path.join(to_dir, to_name), mv=self.mv, ov=self.ov, inc=self.inc)
	    ret['fn'] = to_name
	    ret['dir'] = to_dir
	    if log_action and self.tumblr:
		title = pif.form.get_str('title', to_name)
		url = pif.secure_prod + os.path.join(to_dir, to_name)
		link = pif.secure_prod + self.link
		title = to_name
		if cred:
		    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, to_dir, to_name))
	return ret
示例#32
0
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')
    sec = pif.form.get_str('sec')
    ran = pif.form.get_str('ran')
    reg = sec if sec else pic[4] if (ref.startswith('year') and pic and len(pic) > 4 and pic[:4].isdigit()) else ''
    reg_list = mbdata.get_region_tree(reg) + ['']
    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:
        raw_variations = pif.dbh.fetch_variation_by_select(mod_id, ref, sec_id=reg_list, ran_id=ran)
        variations = reduce_variations(pif, mod_id, raw_variations)
    base_names = pif.dbh.fetch_variation_base_names(mod_id)
    # 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 reg_list or reg_list == ['']):
		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 = pif.dbh.fetch_aliases(mod_id, 'mack')

    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_icon('c_' + 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, [x['alias.id'] for x in pif.dbh.fetch_aliases(mod_id, 'mack')])] if boxstyles else []
    adds += models.make_adds(pif, mod_id)

    plants = make_plants(pif, mod_id, pif.dbh.fetch_variation_plant_counts(mod_id))
    relateds = pif.dbh.fetch_casting_relateds(mod_id)
    mack_nums = get_mack_numbers(pif, mod_id, model['model_type'], aliases)

    # ------- 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_MAN_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': mack_nums,
	'product_pic': pic,
	'appearances': show_lineup_appearances(pif, appearances),
	'matrixes': show_series_appearances(pif, pif.dbh.fetch_matrix_appearances(mod_id), relateds),
	'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, [x for x in relateds if x['casting_related.section_id'] == 'single']),
	'compares': make_compares(pif, mod_id, [x for x in relateds if x['casting_related.section_id'] in ['sf', 'rw', 'tr']]),
	'adds_box': models.show_adds(pif, mod_id),
	'adds': adds,
	'plants': plants,
	'base_names': base_names,
	'info_cols': int(bool(model.get('makes'))) + int(bool(mack_nums)) +
	    int(bool(model['scale'])) + int(bool(model['country'])) + int(bool(model['first_year'])),
#	'group': pif.render.find_image_path(mod_id, prefix='g', pdir=config.IMG_DIR_ADD)
    }
    return pif.render.format_template('single.html', **context)
示例#33
0
def show_left_bar_content(pif, model, ref, pic, pdir, lm_pic_id, raw_variations):
    mod_id = model['id']
    links = []
    if pif.is_allowed('a'):  # pragma: no cover
        links.append('<a href="vars.cgi?recalc=1&mod=%s">Recalculate</a>' % mod_id)
        links.append('<a href="%s">Casting</a>' % pif.dbh.get_editor_link('casting', {'id': mod_id}))
        links.append('<a href="%s">AttrPics</a>' % pif.dbh.get_editor_link('attribute_picture', {'mod_id': mod_id}))
        links.append('<a href="mass.cgi?type=related&mod_id=%s">Relateds</a>' % mod_id)
        links.append('<a href="mass.cgi?type=alias&mod_id=%s">Aliases</a>' % mod_id)
        links.append('<a href="vars.cgi?edt=1&mod=%s">Variations</a>' % mod_id)
        links.append('<a href="vars.cgi?adl=1&mod=%s">Attr Edit</a>' % mod_id)
        links.append('<a href="vars.cgi?vdt=1&mod=%s">Details</a>' % mod_id)
        links.append('<a href="vsearch.cgi?ask=1&id=%s">Search</a>' % mod_id)
        links.append('<a href="pics.cgi?m=%s">Pics</a> <a href="vars.cgi?lrg=1&mod=%s&pic1=1&hc=1&picown=1&ci=1&c1=1&c2=1">Creds</a>' % (mod_id.lower(), mod_id))
        links.append('<a href="edlinks.cgi?page_id=single.%s">Links</a>' % mod_id)
    if os.path.exists(useful.relpath('.', config.LIB_MAN_DIR, mod_id.replace('/', '_').lower())):
	if pif.is_allowed('v'):  # pragma: no cover
	    links.append('<a href="traverse.cgi?d=%s">Library</a>' % useful.relpath('.', config.LIB_MAN_DIR, mod_id.replace('/', '_').lower()))
	if pif.is_allowed('a'):  # pragma: no cover
	    links.append('<a href="upload.cgi?d=%s&m=%s">Library Upload</a>' % (useful.relpath('.', config.LIB_MAN_DIR, mod_id.replace('/', '_').lower()), mod_id.replace('/', '_').lower()))
	    links.append('<a href="/cgi-bin/traverse.cgi?p=%s&d=%s&mr=1&lty=mss&til=1&credit=DT" target="_blank">Tilley List</a>' %
			 (imglib.get_tilley_file().get(mod_id.lower(), [''])[0] + '*',
			 useful.relpath('.', config.LIB_MAN_DIR, mod_id.replace('/', '_').lower())))

    ref_link = ostr = ''
    if pif.is_allowed('a'):  # pragma: no cover
        prodstar = 'far fa-star black'
        if ref.startswith('year.'):
            ref_link = pif.dbh.get_editor_link('lineup_model', {'year': ref[5:], 'mod_id': mod_id})
        elif ref.startswith('matrix.'):
            ref_link = pif.dbh.get_editor_link('matrix_model', {'page_id': ref, 'mod_id': id})
        elif ref.startswith('packs.'):
            ref_link = pif.dbh.get_editor_link('pack_model', {'pack_id': pif.form.get_str('sec'), 'mod_id': mod_id})
        if pic:
	    links.append('')
            prodstar = 'fas fa-star white'
	    prod = pic
            prod += ' <a href="upload.cgi?d=%s&n=%s&c=%s&link=%s"><i class="fas fa-upload"></i></a>' % (pdir.replace('pic', 'lib'), pic, pic, useful.url_quote(pif.request_uri))
            prodpic = pif.render.find_image_path(pic, pdir=pdir, largest="m")
            if lm_pic_id:
		prod = '<i class="%s"></i>\n' % prodstar + prod
                prod += ' <a href="%s&useprev=2"><i class="fas fa-step-backward red"></i></a>' % pif.request_uri
            elif prodpic:
                x, y = imglib.get_size(prodpic)
                if x > 400:
                    prodstar = 'fas fa-star yellow'
                elif x == 400:
                    prodstar = 'fas fa-star black'
                else:
                    prodstar = 'fas fa-star red'
		prod = '<i class="%s"></i>\n' % prodstar + prod
                prod += ' <a href="imawidget.cgi?act=1&d=./%s&f=%s&trash=1"><i class="fas fa-times"></i></a>' % (pdir, prodpic[prodpic.rfind('/') + 1:])
		if ref_link:
		    prod += pif.render.format_link(ref_link, ' <i class="fas fa-edit"></i>')
            else:
		prod = '<i class="%s"></i>\n' % prodstar + prod
		if ref_link:
		    prod += pif.render.format_link(ref_link, ' <i class="fas fa-edit"></i>')
                prod += ' <a href="%s&useprev=1"><i class="fas fa-step-backward"></i></a>' % pif.request_uri
	    links.append(prod)
        links.append('')
        vfl = pif.dbh.fetch_variation_files(mod_id)
        for vf in vfl if vfl else [{'mod_id': mod_id, 'imported_from': 'importer'}]:
            links.append('<a href="vedit.cgi?d=src/mbxf&m=%(mod_id)s&f=%(imported_from)s">%(imported_from)s</a>' % vf)
	var_pics, var_texts = show_list_var_pics(pif, mod_id)
        ostr += '<br>\n'.join(var_pics) + '<p>\n'
	fmt_bad, _, _ = pif.dbh.check_description_formatting(mod_id)
	ostr += '<i class="fas fa-times red"></i>' if fmt_bad else '<i class="fas fa-check green"></i>'
	ostr += '<br>'
	for i_vt in range(1, len(var_texts)):
	    vt = var_texts[i_vt]
	    ostr += '<i title="%s" class="%s"></i>\n' % (mbdata.model_texts[i_vt - 1],
		    'far fa-star gray' if not model['format_' + mbdata.desc_attributes[i_vt - 1]] else
                    ('fas fa-star green' if vt == var_texts[0] else ('fas fa-star red' if not vt else 'fas fa-star yellow')))
        ostr += '<p>\n'
        var_ids = [x['v.var'] for x in raw_variations]
        var_ids.sort()
        for var in var_ids:
            ostr += '<a href="vars.cgi?mod=%s&var=%s&edt=1">%s</a>\n' % (mod_id, var, var)
	    if var:
		for sz in mbdata.image_size_types:
		    if os.path.exists(useful.relpath('.', config.IMG_DIR_VAR, sz + '_' + mod_id + '-' + var + '.jpg').lower()):
			ostr += sz.upper() + ' '
		ostr += '<a href="vars.cgi?mod=%s&var=%s&edt=1"><i class="fas fa-edit"></i></a>\n' % (mod_id, var)
		ostr += pif.render.format_link('upload.cgi?d=%s&m=%s&v=%s&l=1&c=%s+variation+%s' % (useful.relpath('.', config.LIB_MAN_DIR, mod_id.lower()), mod_id, var, mod_id, var), '<i class="fas fa-upload"></i>') + '\n'
		ostr += pif.render.format_link('traverse.cgi?g=1&d=%s&man=%s&var=%s' % (useful.relpath('.', config.LIB_MAN_DIR, mod_id.lower()), mod_id, var), '<i class="fas fa-bars"></i>') + '\n'
            ostr += '<br>\n'
	for attr in pif.dbh.fetch_attributes(mod_id):
	    ostr += attr['attribute.attribute_name'] + '<br>\n'
    ostr = '<br>\n'.join(links) + '<p>\n' + ostr
    return ostr
示例#34
0
def blister_things(pif):
    dblist = bfiles.SimpleFile(useful.relpath(config.SRC_DIR, 'blister.dat'))
    for llist in dblist:
	if llist[0] == 'm':
	    if llist[1].endswith('p'):
		print llist[3]
示例#35
0
def clean_dir(page_id):
    ln = useful.relpath('.', config.LIB_DIR, '0files')
    dn = useful.relpath('.', config.LIB_MAN_DIR, page_id.lower())
    print("attempting to clean", page_id)
    do_top_dir(ln, dn)
示例#36
0
def blister_things(pif):
    dblist = bfiles.SimpleFile(useful.relpath(config.SRC_DIR, 'blister.dat'))
    for llist in dblist:
        if llist[0] == 'm':
            if llist[1].endswith('p'):
                print llist[3]
示例#37
0
 def __init__(self, fname=useful.relpath(config.SRC_DIR, "cars.dat")):
     self.sec = []
     self.ent = []
     self.secname = ''
     bfiles.ArgFile.__init__(self, fname)