def fill_all(info, form_author=config.default_author, fp_sel='0'): global author # Create dict from coloumns field = {} for col in DBstructure.colNames: field[col.replace(' ', '_')] = None # Fill the fields author = form_author spec(field, info) # Connect DB conn, cur = db_connect() subclass(field, info, conn, cur) fp_list = fp(field, conn, cur, fp_sel) db_disconnect(conn, cur) # Generate datasheet path ds(field) # if not field['Component_Kind']: # print('Mandatory field \'Component Kind\' not found') # field['Component_Kind'] = selection(DBstructure.tables, 'Component Kind', mandatory = True) return field, fp_list
def storage_update(table, part, cell, qty): conn, cur = db_connect() upd_query = 'UPDATE ' + table + ' SET `Storage Cell` = ?, `Storage Quantity` = ? WHERE `Part Number` LIKE ?' cur.execute(upd_query, (cell, str(qty), part)) conn.commit() db_disconnect(conn, cur) return True
def add_part(field): # Firstly try to download datasheet print(field['datasheet_url']) if field['datasheet_url']: if field['datasheet_url'] != 'None': # Fix 'HTTP Error 403' from https://stackoverflow.com/a/36663971 opener = urllib.request.build_opener() opener.addheaders = [( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36' )] urllib.request.install_opener(opener) print('Downloading datasheet ...') try: urllib.request.urlretrieve(field['datasheet_url'], field['HelpURL']) except Exception as e: print('Download failed', e) return 'Downloading datasheet failed: ' + str(e) else: print('Download successful') else: field['HelpURL'] = '' else: field['HelpURL'] = '' # Add to database # Convert dict to sorted tuple for universal INSERT syntax insList = [] for col in DBstructure.colNames: insList.append(field[col.replace(' ', '_')]) insTuple = tuple(insList) # Then choose a table if field['Component_Kind'] == 'Semiconductors': skillet = DBstructure.tupleInsSemiconductors elif field['Component_Kind'] == 'Passives': skillet = DBstructure.tupleInsPassives elif field['Component_Kind'] == 'Electromechanical': skillet = DBstructure.tupleInsElectromechanical else: return 'No table like \'Component Kind\' in DB' # And then make a record try: conn, cur = db_connect() cur.execute(skillet, insTuple) conn.commit() db_disconnect(conn, cur) except Exception as e: return 'Database error' return 'Component added'
def local(keyword): conn, cur = db_connect() db_result = [] if keyword: print('Search in DB Lib ...') idx = 0 findkey = '%' + keyword + '%' cur.execute( '''(SELECT `Part Number`, `Part Description`, Author, CreateDate, `Storage Cell`, `Storage Quantity` FROM Semiconductors WHERE `Part Number` LIKE ?)''', findkey) for item in cur.fetchall(): db_result.append(['Semiconductors']) for col in item: db_result[idx].append(col) idx += 1 cur.execute( '''(SELECT `Part Number`, `Part Description`, Author, CreateDate, `Storage Cell`, `Storage Quantity` FROM Passives WHERE `Part Number` LIKE ?)''', findkey) for item in cur.fetchall(): db_result.append(['Passives']) for col in item: db_result[idx].append(col) idx += 1 cur.execute( '''(SELECT `Part Number`, `Part Description`, Author, CreateDate, `Storage Cell`, `Storage Quantity` FROM Electromechanical WHERE `Part Number` LIKE ?)''', findkey) for item in cur.fetchall(): db_result.append(['Electromechanical']) for col in item: db_result[idx].append(col) idx += 1 db_disconnect(conn, cur) return db_result
def res_yageo(): conn, cur = db_connect() cur.execute('''SELECT `Part Number`, `Manufacturer Part Number` FROM Passives WHERE `Table` LIKE \'%Resistors SMD%\'''') total = 0 success = 0 for item in cur.fetchall(): pn = '--' if item[0] == item[1]: total += 1 parm = item[0].split('_') if parm is not None: if len(parm) >= 5: # R0805_1M24_1%_0.125W_200PPM case = parm[0][1:] val = parm[1] power = parm[3] drift = parm[4] if parm[2] == '0.1%': tol = 'F' # tol = 'B' # Not present in Yageo products elif parm[2] == '0.5%': tol = 'F' # tol = 'D' # Not present in Yageo products elif parm[2] == '1%': tol = 'F' elif parm[2] == '5%': tol = 'J' else: continue pn = 'RC{}{}R-07{}L'.format(case, tol, val) # RC0805FR-074K99L success += 1 dt = datetime.now().strftime('%Y-%m-%d %H:%M:%S') upd_query = 'UPDATE Passives SET `Manufacturer1 Example` = ?, `Manufacturer1 Part Number` = ?, `LatestRevisionDate` = ? WHERE `Part Number` LIKE ?' # print('YAGEO', pn, dt, item[0]) cur.execute(upd_query, ('YAGEO', pn, dt, item[0]))
def cap_yageo(): conn, cur = db_connect() cur.execute('''SELECT `Part Number`, `Manufacturer Part Number` FROM Passives WHERE `Table` LIKE \'%Capacitors SMD%\'''') total = 0 success = 0 case_lst = [ 'CC0201', 'CC0402', 'CC0603', 'CC0805', 'CC1206', 'CC1210', 'CC1812' ] for item in cur.fetchall(): pn = '--' if item[0] == item[1] and item[0][:2] == 'CC': total += 1 sgn = 0 pack = 'R' parm = item[0].split('_') if parm is not None: if len(parm) >= 5: # CC0805_1UF_25V_10%_X7R diel = parm[4] case = parm[0] if ((diel == 'X7R' and case not in case_lst) or (diel == 'X5R' and case not in case_lst[:-1]) or (diel not in ['X7R', 'X5R'])): continue # 0201 .. 1206 # if THICKNESS > 0.85 => blister (K) # 0805 - EB # 1206 - F1, FA, FC, FD # 1210 .. 1812 # blister only (K) if case in ['CC1210', 'CC1812']: pack = 'K' origval = parm[1][:-2] if isnum(origval): sgn = float(origval) if parm[1][-2] == 'P': if sgn >= 100.0: val = str(int(sgn / 10)) + '1' else: continue elif parm[1][-2] == 'N': if case == 'CC0805': if (parm[2] == '50V' and origval == '220') or (sgn > 220.0): pack = 'K' if diel == 'X5R' and parm[ 3] == '20%' and sgn > 220.0: continue if sgn < 10.0: val = str(int(sgn * 10)) + '2' elif sgn < 100.0: val = str(int(sgn)) + '3' else: val = str(int(sgn / 10)) + '4' elif parm[1][-2] == 'U' and parm[3] != '5%': if case == 'CC0805': pack = 'K' if sgn < 10.0: val = str(int(sgn * 10)) + '5' elif sgn < 100.0: val = str(int(sgn)) + '6' else: continue else: continue else: continue if parm[2] == '6.3V': vol = '5' elif parm[2] == '10V': vol = '6' elif parm[2] == '16V': if case == 'CC0201' and diel == 'X5R': continue else: vol = '7' elif parm[2] == '25V': vol = '8' elif parm[2] == '50V': vol = '9' else: continue if parm[3] == '5%': tol = 'J' elif parm[3] == '10%': tol = 'K' elif parm[3] == '20%': tol = 'M' else: continue pn = '{}{}{}{}{}BB{}'.format(case, tol, pack, diel, vol, val) # CC0805KRX7R9BB102 success += 1 dt = datetime.now().strftime('%Y-%m-%d %H:%M:%S') upd_query = 'UPDATE Passives SET `Manufacturer1 Example` = ?, `Manufacturer1 Part Number` = ?, `LatestRevisionDate` = ? WHERE `Part Number` LIKE ?' # print('YAGEO', pn, dt, item[0]) cur.execute(upd_query, ('YAGEO', pn, dt, item[0]))