def get(self): p = self.request.get('p') q = self.request.get('q') c = self.request.get('c') forward = True if p not in ['prev'] else False cursor = Cursor(urlsafe=c) user_key = ndb.Key('User', long(self.user_id)) if q: qry = Bom.query( Bom.owners == user_key, ndb.OR(Bom.public_id == q, Bom.name == q, Bom.tag_name == q)) else: qry = Bom.query(Bom.owners == user_key) PAGE_SIZE = 5 if forward: boms, next_cursor, more = qry.order(Bom.key).fetch_page( PAGE_SIZE, start_cursor=cursor) if next_cursor and more: self.view.next_cursor = next_cursor if c: self.view.prev_cursor = cursor.reversed() else: boms, next_cursor, more = qry.order(-Bom.key).fetch_page( PAGE_SIZE, start_cursor=cursor) boms = list(reversed(boms)) if next_cursor and more: self.view.prev_cursor = next_cursor self.view.next_cursor = cursor.reversed() def pager_url(p, cursor): params = OrderedDict() if q: params['q'] = q if p in ['prev']: params['p'] = p if cursor: params['c'] = cursor.urlsafe() return self.uri_for('boms', **params) self.view.pager_url = pager_url self.view.q = q params = { "list_columns": [('name', 'BOM Name'), ('public_id', 'Public ID'), ('public', 'public'), ('change_time', 'Last Updated')], "boms": boms, "count": qry.count() } return self.render_template('boms.html', **params)
def get(self): p = self.request.get('p') q = self.request.get('q') c = self.request.get('c') forward = True if p not in ['prev'] else False cursor = Cursor(urlsafe=c) if q: qry = Bom.query(ndb.OR(Bom.public_id == q, Bom.name == q, Bom.tag_name == q)) else: qry = Bom.query() PAGE_SIZE = 5 if forward: boms, next_cursor, more = qry.order(Bom.key).fetch_page(PAGE_SIZE, start_cursor=cursor) if next_cursor and more: self.view.next_cursor = next_cursor if c: self.view.prev_cursor = cursor.reversed() else: boms, next_cursor, more = qry.order(-Bom.key).fetch_page(PAGE_SIZE, start_cursor=cursor) boms = list(reversed(boms)) if next_cursor and more: self.view.prev_cursor = next_cursor self.view.next_cursor = cursor.reversed() def pager_url(p, cursor): params = OrderedDict() if q: params['q'] = q if p in ['prev']: params['p'] = p if cursor: params['c'] = cursor.urlsafe() return self.uri_for('boms-admin', **params) self.view.pager_url = pager_url self.view.q = q params = { "list_columns": [('public_id', 'Public ID'), ('name', 'BOM Name'), ('tag_name', 'Tag Name'), ('public', 'public')], "boms" : boms, "count" : qry.count(), } # FIXME: admin_user should probably go into BaseHandler params['admin_user'] = googleusers.is_current_user_admin() return self.render_template('admin/boms.html', **params)
def get(self): p = self.request.get('p') q = self.request.get('q') c = self.request.get('c') forward = True if p not in ['prev'] else False cursor = Cursor(urlsafe=c) user_key = ndb.Key('User', long(self.user_id)) if q: qry = Bom.query(Bom.owners == user_key, ndb.OR(Bom.public_id == q, Bom.name == q, Bom.tag_name == q)) else: qry = Bom.query(Bom.owners == user_key) PAGE_SIZE = 5 if forward: boms, next_cursor, more = qry.order(Bom.key).fetch_page(PAGE_SIZE, start_cursor=cursor) if next_cursor and more: self.view.next_cursor = next_cursor if c: self.view.prev_cursor = cursor.reversed() else: boms, next_cursor, more = qry.order(-Bom.key).fetch_page(PAGE_SIZE, start_cursor=cursor) boms = list(reversed(boms)) if next_cursor and more: self.view.prev_cursor = next_cursor self.view.next_cursor = cursor.reversed() def pager_url(p, cursor): params = OrderedDict() if q: params['q'] = q if p in ['prev']: params['p'] = p if cursor: params['c'] = cursor.urlsafe() return self.uri_for('boms', **params) self.view.pager_url = pager_url self.view.q = q params = { "list_columns": [('name', 'BOM Name'), ('public_id', 'Public ID'), ('public', 'public'), ('change_time', 'Last Updated')], "boms" : boms, "count" : qry.count() } return self.render_template('boms.html', **params)
def get(self): bom = Bom.new('newbom') bom.name = 'bom-' + bom.public_id bom.put(self.user_id, makeowner=True) time.sleep(0.6) # give db some time to write self.add_message("New BOM created!", 'success') return self.redirect_to('bom-edit', public_id=bom.public_id)
def get(self, public_id): params = {} bom = Bom.query(Bom.public_id == public_id).get() if bom: parts = Part.query(ancestor=bom.key).order(-Part.create_time).fetch() rawparts = [] for part in parts: raw = [] quantity_units = '' if part.quantity_units: quantity_units = ', units='+part.quantity_units raw.append(part.name+quantity_units+' '+part.part_group+'\n') for note in part.note_list: raw.append(' * '+note+'\n') for designator in part.designator_list: raw.append(' # '+designator+'\n') for i in range(len(part.manufacturer_names)): raw.append(' @ '+part.manufacturer_names[i]+ ' '+part.manufacturer_partnums[i]+ '\n') for i in range(len(part.supplier_names)): raw.append(' $ '+part.supplier_names[i]+ ' '+part.supplier_ordernums[i]) package_count = part.supplier_packagecounts[i] if package_count != 1: if (package_count % 1) == 0: package_count = '%0.0f' % package_count else: package_count = '%0.3f' % package_count raw.append(' '+package_count) raw.append(' '+part.supplier_currencies[i]) if part.supplier_countries[i]: raw.append(' '+part.supplier_currencies[i]) raw.append(' %0.2f' % part.supplier_prices[i]) if part.supplier_urls[i]: raw.append(' '+part.supplier_urls[i]) raw.append('\n') for i in range(len(part.subsystem_names)): quantities = part.subsystem_quantities[i] if (quantities % 1) == 0: quantities = '%0.0f' % quantities else: quantities = '%0.2f' % quantities raw.append(' '+quantities+ ' '+part.subsystem_names[i]+ ' '+part.subsystem_specificuses[i]+ '\n') rawparts.append({'id':part.key.id(), 'raw':''.join(raw)[:-1]}) params = { "is_owner" : ndb.Key('User', long(self.user_id or 0)) in bom.owners, "public_id": public_id, "currency": "USD", "bom" : bom, "rawparts" : rawparts } # prime form # self.form.process(obj=bom) return self.render_template('bom_edit.html', **params) else: self.abort(404)
def get_or_404(self, bom_id): try: bom = Bom.get_by_id(long(bom_id)) if bom: return bom except ValueError: pass self.abort(404)
def get(self, bom_id): # TODO: # check user bom = Bom.get_by_id(long(bom_id)) if bom: bom.delete() time.sleep(0.5) # give db some time to write self.add_message('BOM deleted!', 'success') self.redirect(self.uri_for('boms')) else: self.abort(404)
def get(self, public_id): params = {} bom = Bom.query(Bom.public_id == public_id).get() if bom: parts = Part.query(ancestor=bom.key).order(Part.name).fetch() raw = [] for part in parts: quantity_units = '' if part.quantity_units: quantity_units = ', units='+part.quantity_units raw.append(part.name+quantity_units+' '+part.part_group+'\n') for note in part.note_list: raw.append(' * '+note+'\n') for designator in part.designator_list: raw.append(' # '+designator+'\n') for i in range(len(part.manufacturer_names)): raw.append(' @ '+part.manufacturer_names[i]+ ' '+part.manufacturer_partnums[i]+ '\n') for i in range(len(part.supplier_names)): raw.append(' $ '+part.supplier_names[i]+ ' '+part.supplier_ordernums[i]) package_count = part.supplier_packagecounts[i] if package_count != 1: if (package_count % 1) == 0: package_count = '%0.0f' % package_count else: package_count = '%0.3f' % package_count raw.append(' '+package_count) raw.append(' '+part.supplier_currencies[i]) if part.supplier_countries[i]: raw.append(' '+part.supplier_currencies[i]) raw.append(' %0.2f' % part.supplier_prices[i]) if part.supplier_urls[i]: raw.append(' '+part.supplier_urls[i]) raw.append('\n') for i in range(len(part.subsystem_names)): quantities = part.subsystem_quantities[i] if (quantities % 1) == 0: quantities = '%0.0f' % quantities else: quantities = '%0.2f' % quantities raw.append(' '+quantities+ ' '+part.subsystem_names[i]+ ' '+part.subsystem_specificuses[i]+ '\n') raw.append('\n') params['raw'] = ''.join(raw) return self.render_template('bom_raw.html', **params) else: self.abort(404)
def get(self, public_id, currency): params = {} bom = Bom.query(Bom.public_id == public_id).get() if bom: params = { "is_owner" : ndb.Key('User', long(self.user_id or 0)) in bom.owners, "public_id": public_id, "currency": "USD", "bom" : bom, "by_supplier" : bom.get_parts_by_supplier(currency) } return self.render_template('bom_order.html', **params) else: self.abort(404)
def get(self, public_id): params = {} bom = Bom.query(Bom.public_id == public_id).get() if bom: parts = Part.query(ancestor=bom.key).order(Part.name).fetch() raw = [] for part in parts: quantity_units = '' if part.quantity_units: quantity_units = ', units=' + part.quantity_units raw.append(part.name + quantity_units + ' ' + part.part_group + '\n') for note in part.note_list: raw.append(' * ' + note + '\n') for designator in part.designator_list: raw.append(' # ' + designator + '\n') for i in range(len(part.manufacturer_names)): raw.append(' @ ' + part.manufacturer_names[i] + ' ' + part.manufacturer_partnums[i] + '\n') for i in range(len(part.supplier_names)): raw.append(' $ ' + part.supplier_names[i] + ' ' + part.supplier_ordernums[i]) package_count = part.supplier_packagecounts[i] if package_count != 1: if (package_count % 1) == 0: package_count = '%0.0f' % package_count else: package_count = '%0.3f' % package_count raw.append(' ' + package_count) raw.append(' ' + part.supplier_currencies[i]) if part.supplier_countries[i]: raw.append(' ' + part.supplier_currencies[i]) raw.append(' %0.2f' % part.supplier_prices[i]) if part.supplier_urls[i]: raw.append(' ' + part.supplier_urls[i]) raw.append('\n') for i in range(len(part.subsystem_names)): quantities = part.subsystem_quantities[i] if (quantities % 1) == 0: quantities = '%0.0f' % quantities else: quantities = '%0.2f' % quantities raw.append(' ' + quantities + ' ' + part.subsystem_names[i] + ' ' + part.subsystem_specificuses[i] + '\n') raw.append('\n') params['raw'] = ''.join(raw) return self.render_template('bom_raw.html', **params) else: self.abort(404)
def get(self, public_id, currency): params = {} bom = Bom.query(Bom.public_id == public_id).get() if bom: params = { "is_owner": ndb.Key('User', long(self.user_id or 0)) in bom.owners, "public_id": public_id, "currency": "USD", "bom": bom, "by_supplier": bom.get_parts_by_supplier(currency) } return self.render_template('bom_order.html', **params) else: self.abort(404)
def post(self): bomfu = self.request.get('bomfu') if bomfu: self.response.headers.add_header('content-type', 'application/json', charset='utf-8') bom = Bom.new('newbom') bom.name = 'bom-imported-' + bom.public_id bom.put(self.user_id, makeowner=True) ret = parse_and_add(bomfu, bom.key.id(), self.user_id) if ret: # fail bom.key.delete() # FIXME: refactor parse_and_add self.response.out.write(json.dumps({"error":ret})) else: # ok self.response.out.write('{"error":false, "public_id":"'+bom.public_id+'"}') # self.redirect(self.uri_for('bom-edit', public_id=bom.public_id)) else: self.abort(501)
def post(self): bomfu = self.request.get('bomfu') if bomfu: self.response.headers.add_header('content-type', 'application/json', charset='utf-8') bom = Bom.new('newbom') bom.name = 'bom-imported-' + bom.public_id bom.put(self.user_id, makeowner=True) ret = parse_and_add(bomfu, bom.key.id(), self.user_id) if ret: # fail bom.key.delete() # FIXME: refactor parse_and_add self.response.out.write(json.dumps({"error": ret})) else: # ok self.response.out.write('{"error":false, "public_id":"' + bom.public_id + '"}') # self.redirect(self.uri_for('bom-edit', public_id=bom.public_id)) else: self.abort(501)
def post(self, bom_id): name = self.request.get('name') public = self.request.get('public') bom = Bom.get_by_id(long(bom_id)) if bom: self.response.headers.add_header('content-type', 'application/json', charset='utf-8') ret = 'false' if name: bom.name = name if public: if public == 'true': bom.public = True elif public == 'false': bom.public = False if name or public: try: bom.put(self.user_id) except AuthWriterError as ex: ret = str(ex) self.response.out.write('{"error":'+ret+'}') else: self.abort(404)
def post(self, bom_id): name = self.request.get('name') public = self.request.get('public') bom = Bom.get_by_id(long(bom_id)) if bom: self.response.headers.add_header('content-type', 'application/json', charset='utf-8') ret = 'false' if name: bom.name = name if public: if public == 'true': bom.public = True elif public == 'false': bom.public = False if name or public: try: bom.put(self.user_id) except AuthWriterError as ex: ret = str(ex) self.response.out.write('{"error":' + ret + '}') else: self.abort(404)
def get(self, public_id): params = {} bom = Bom.query(Bom.public_id == public_id).get() if bom: parts = Part.query( ancestor=bom.key).order(-Part.create_time).fetch() rawparts = [] for part in parts: raw = [] quantity_units = '' if part.quantity_units: quantity_units = ', units=' + part.quantity_units raw.append(part.name + quantity_units + ' ' + part.part_group + '\n') for note in part.note_list: raw.append(' * ' + note + '\n') for designator in part.designator_list: raw.append(' # ' + designator + '\n') for i in range(len(part.manufacturer_names)): raw.append(' @ ' + part.manufacturer_names[i] + ' ' + part.manufacturer_partnums[i] + '\n') for i in range(len(part.supplier_names)): raw.append(' $ ' + part.supplier_names[i] + ' ' + part.supplier_ordernums[i]) package_count = part.supplier_packagecounts[i] if package_count != 1: if (package_count % 1) == 0: package_count = '%0.0f' % package_count else: package_count = '%0.3f' % package_count raw.append(' ' + package_count) raw.append(' ' + part.supplier_currencies[i]) if part.supplier_countries[i]: raw.append(' ' + part.supplier_currencies[i]) raw.append(' %0.2f' % part.supplier_prices[i]) if part.supplier_urls[i]: raw.append(' ' + part.supplier_urls[i]) raw.append('\n') for i in range(len(part.subsystem_names)): quantities = part.subsystem_quantities[i] if (quantities % 1) == 0: quantities = '%0.0f' % quantities else: quantities = '%0.2f' % quantities raw.append(' ' + quantities + ' ' + part.subsystem_names[i] + ' ' + part.subsystem_specificuses[i] + '\n') rawparts.append({ 'id': part.key.id(), 'raw': ''.join(raw)[:-1] }) params = { "is_owner": ndb.Key('User', long(self.user_id or 0)) in bom.owners, "public_id": public_id, "currency": "USD", "bom": bom, "rawparts": rawparts } # prime form # self.form.process(obj=bom) return self.render_template('bom_edit.html', **params) else: self.abort(404)
def get(self): """Add new test BOM from file. Parsed BOM format: [ [ part_name, quantity_units, part_group, [ note, ... ], [ designator, ... ], [ [manufacturer, part_num], ... ], [ [supplier_name, order_num, package_count, currency, country, amount, explicit_url], [another supplier], ... ], [ [quantity, subsystem, specific use], [another usage], ... ] ], [ another part ], ... ] """ from web.bomfu_parser_legacy import get_new_from_legacy from web.bomfu_parser import parse bom_file = get_new_from_legacy() bom_parsed = parse(bom_file) bom = Bom.new('') bom.name = "test-" + str(bom.public_id) bom._put() # put without setting user for p in bom_parsed: part = bom.new_part(p[0]) part.quantity_units = p[1] part.part_group = p[2] part.note_list = p[3] part.designator_list = p[4] for manufacturer in p[5]: part.manufacturer_names.append(manufacturer[0]) part.manufacturer_partnums.append(manufacturer[1]) for supplier in p[6]: part.supplier_names.append(supplier[0]) part.supplier_ordernums.append(supplier[1]) part.supplier_packagecounts.append(supplier[2]) part.supplier_currencies.append(supplier[3]) part.supplier_countries.append(supplier[4]) part.supplier_prices.append(supplier[5]) part.supplier_urls.append(supplier[6]) for usage in p[7]: part.subsystem_quantities.append(usage[0]) part.subsystem_names.append(usage[1]) part.subsystem_specificuses.append(usage[2]) part._put() self.redirect(self.uri_for('bom-raw', public_id=bom.public_id))
def get(self): """Add new test BOM from file. Parsed BOM format: [ [ part_name, quantity_units, part_group, [ note, ... ], [ designator, ... ], [ [manufacturer, part_num], ... ], [ [supplier_name, order_num, package_count, currency, country, amount, explicit_url], [another supplier], ... ], [ [quantity, subsystem, specific use], [another usage], ... ] ], [ another part ], ... ] """ try: from web.bomfu_parser import parse bom_parsed = parse(example_simple) # bom_parsed = parse(example) except bomfu_parser.ParseError as ex: self.add_message("%s" % ex, 'error') try: bom = Bom.new('') bom.name = "lasersaur-" + str(bom.public_id) bom.put(self.user_id, makeowner=True) for p in bom_parsed: part = bom.new_part(p[0]) part.quantity_units = p[1] part.part_group = p[2] part.note_list = p[3] part.designator_list = p[4] for manufacturer in p[5]: part.manufacturer_names.append(manufacturer[0]) part.manufacturer_partnums.append(manufacturer[1]) for supplier in p[6]: part.supplier_names.append(supplier[0]) part.supplier_ordernums.append(supplier[1]) part.supplier_packagecounts.append(supplier[2]) part.supplier_currencies.append(supplier[3]) part.supplier_countries.append(supplier[4]) part.supplier_prices.append(supplier[5]) part.supplier_urls.append(supplier[6]) for usage in p[7]: part.subsystem_quantities.append(usage[0]) part.subsystem_names.append(usage[1]) part.subsystem_specificuses.append(usage[2]) part.put(self.user_id) except AuthWriterError as ex: self.add_message("%s" % ex, 'error') self.redirect(self.uri_for('bom-edit', public_id=bom.public_id))