From 6bedeef48a9ff477d958cb1efe5c7fb772633ac2 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 7 Jun 2021 22:04:03 +0200 Subject: [PATCH] implement skills and languages endpoints --- Pipfile | 3 + README.md | 5 + app.py | 2 +- data/imgs/flags/{AD.png => ad.png} | Bin data/imgs/flags/{AE.png => ae.png} | Bin data/imgs/flags/{AF.png => af.png} | Bin data/imgs/flags/{AG.png => ag.png} | Bin data/imgs/flags/{AI.png => ai.png} | Bin data/imgs/flags/{AL.png => al.png} | Bin data/imgs/flags/{AM.png => am.png} | Bin data/imgs/flags/{AN.png => an.png} | Bin data/imgs/flags/{AO.png => ao.png} | Bin data/imgs/flags/{AQ.png => aq.png} | Bin data/imgs/flags/{AR.png => ar.png} | Bin data/imgs/flags/{AS.png => as.png} | Bin data/imgs/flags/{AT.png => at.png} | Bin data/imgs/flags/{AU.png => au.png} | Bin data/imgs/flags/{AW.png => aw.png} | Bin data/imgs/flags/{AX.png => ax.png} | Bin data/imgs/flags/{AZ.png => az.png} | Bin data/imgs/flags/{BA.png => ba.png} | Bin data/imgs/flags/{BB.png => bb.png} | Bin data/imgs/flags/{BD.png => bd.png} | Bin data/imgs/flags/{BE.png => be.png} | Bin data/imgs/flags/{BF.png => bf.png} | Bin data/imgs/flags/{BG.png => bg.png} | Bin data/imgs/flags/{BH.png => bh.png} | Bin data/imgs/flags/{BI.png => bi.png} | Bin data/imgs/flags/{BJ.png => bj.png} | Bin data/imgs/flags/{BL.png => bl.png} | Bin data/imgs/flags/{BM.png => bm.png} | Bin data/imgs/flags/{BN.png => bn.png} | Bin data/imgs/flags/{BO.png => bo.png} | Bin data/imgs/flags/{BR.png => br.png} | Bin data/imgs/flags/{BS.png => bs.png} | Bin data/imgs/flags/{BT.png => bt.png} | Bin data/imgs/flags/{BW.png => bw.png} | Bin data/imgs/flags/{BY.png => by.png} | Bin data/imgs/flags/{BZ.png => bz.png} | Bin data/imgs/flags/{CA.png => ca.png} | Bin data/imgs/flags/{CC.png => cc.png} | Bin data/imgs/flags/{CD.png => cd.png} | Bin data/imgs/flags/{CF.png => cf.png} | Bin data/imgs/flags/{CG.png => cg.png} | Bin data/imgs/flags/{CH.png => ch.png} | Bin data/imgs/flags/{CI.png => ci.png} | Bin data/imgs/flags/{CK.png => ck.png} | Bin data/imgs/flags/{CL.png => cl.png} | Bin data/imgs/flags/{CM.png => cm.png} | Bin data/imgs/flags/{CN.png => cn.png} | Bin data/imgs/flags/{CO.png => co.png} | Bin data/imgs/flags/{CR.png => cr.png} | Bin data/imgs/flags/{CT.png => ct.png} | Bin data/imgs/flags/{CU.png => cu.png} | Bin data/imgs/flags/{CV.png => cv.png} | Bin data/imgs/flags/{CW.png => cw.png} | Bin data/imgs/flags/{CX.png => cx.png} | Bin data/imgs/flags/{CY.png => cy.png} | Bin data/imgs/flags/{CZ.png => cz.png} | Bin data/imgs/flags/{DE.png => de.png} | Bin data/imgs/flags/{DJ.png => dj.png} | Bin data/imgs/flags/{DK.png => dk.png} | Bin data/imgs/flags/{DM.png => dm.png} | Bin data/imgs/flags/{DO.png => do.png} | Bin data/imgs/flags/{DZ.png => dz.png} | Bin data/imgs/flags/{EC.png => ec.png} | Bin data/imgs/flags/{EE.png => ee.png} | Bin data/imgs/flags/{EG.png => eg.png} | Bin data/imgs/flags/{EH.png => eh.png} | Bin data/imgs/flags/{ER.png => er.png} | Bin data/imgs/flags/{ES.png => es.png} | Bin data/imgs/flags/{ET.png => et.png} | Bin data/imgs/flags/{EU.png => eu.png} | Bin data/imgs/flags/{FI.png => fi.png} | Bin data/imgs/flags/{FJ.png => fj.png} | Bin data/imgs/flags/{FK.png => fk.png} | Bin data/imgs/flags/{FM.png => fm.png} | Bin data/imgs/flags/{FO.png => fo.png} | Bin data/imgs/flags/{FR.png => fr.png} | Bin data/imgs/flags/{GA.png => ga.png} | Bin data/imgs/flags/{GB.png => gb.png} | Bin data/imgs/flags/{GD.png => gd.png} | Bin data/imgs/flags/{GE.png => ge.png} | Bin data/imgs/flags/{GG.png => gg.png} | Bin data/imgs/flags/{GH.png => gh.png} | Bin data/imgs/flags/{GI.png => gi.png} | Bin data/imgs/flags/{GL.png => gl.png} | Bin data/imgs/flags/{GM.png => gm.png} | Bin data/imgs/flags/{GN.png => gn.png} | Bin data/imgs/flags/{GQ.png => gq.png} | Bin data/imgs/flags/{GR.png => gr.png} | Bin data/imgs/flags/{GS.png => gs.png} | Bin data/imgs/flags/{GT.png => gt.png} | Bin data/imgs/flags/{GU.png => gu.png} | Bin data/imgs/flags/{GW.png => gw.png} | Bin data/imgs/flags/{GY.png => gy.png} | Bin data/imgs/flags/{HK.png => hk.png} | Bin data/imgs/flags/{HN.png => hn.png} | Bin data/imgs/flags/{HR.png => hr.png} | Bin data/imgs/flags/{HT.png => ht.png} | Bin data/imgs/flags/{HU.png => hu.png} | Bin data/imgs/flags/{IC.png => ic.png} | Bin data/imgs/flags/{ID.png => id.png} | Bin data/imgs/flags/{IE.png => ie.png} | Bin data/imgs/flags/{IL.png => il.png} | Bin data/imgs/flags/{IM.png => im.png} | Bin data/imgs/flags/{IN.png => in.png} | Bin data/imgs/flags/{IQ.png => iq.png} | Bin data/imgs/flags/{IR.png => ir.png} | Bin data/imgs/flags/{IS.png => is.png} | Bin data/imgs/flags/{IT.png => it.png} | Bin data/imgs/flags/{JE.png => je.png} | Bin data/imgs/flags/{JM.png => jm.png} | Bin data/imgs/flags/{JO.png => jo.png} | Bin data/imgs/flags/{JP.png => jp.png} | Bin data/imgs/flags/{KE.png => ke.png} | Bin data/imgs/flags/{KG.png => kg.png} | Bin data/imgs/flags/{KH.png => kh.png} | Bin data/imgs/flags/{KI.png => ki.png} | Bin data/imgs/flags/{KM.png => km.png} | Bin data/imgs/flags/{KN.png => kn.png} | Bin data/imgs/flags/{KP.png => kp.png} | Bin data/imgs/flags/{KR.png => kr.png} | Bin data/imgs/flags/{KW.png => kw.png} | Bin data/imgs/flags/{KY.png => ky.png} | Bin data/imgs/flags/{KZ.png => kz.png} | Bin data/imgs/flags/{LA.png => la.png} | Bin data/imgs/flags/{LB.png => lb.png} | Bin data/imgs/flags/{LC.png => lc.png} | Bin data/imgs/flags/{LI.png => li.png} | Bin data/imgs/flags/{LK.png => lk.png} | Bin data/imgs/flags/{LR.png => lr.png} | Bin data/imgs/flags/{LS.png => ls.png} | Bin data/imgs/flags/{LT.png => lt.png} | Bin data/imgs/flags/{LU.png => lu.png} | Bin data/imgs/flags/{LV.png => lv.png} | Bin data/imgs/flags/{LY.png => ly.png} | Bin data/imgs/flags/{MA.png => ma.png} | Bin data/imgs/flags/{MC.png => mc.png} | Bin data/imgs/flags/{MD.png => md.png} | Bin data/imgs/flags/{ME.png => me.png} | Bin data/imgs/flags/{MF.png => mf.png} | Bin data/imgs/flags/{MG.png => mg.png} | Bin data/imgs/flags/{MH.png => mh.png} | Bin data/imgs/flags/{MK.png => mk.png} | Bin data/imgs/flags/{ML.png => ml.png} | Bin data/imgs/flags/{MM.png => mm.png} | Bin data/imgs/flags/{MN.png => mn.png} | Bin data/imgs/flags/{MO.png => mo.png} | Bin data/imgs/flags/{MP.png => mp.png} | Bin data/imgs/flags/{MQ.png => mq.png} | Bin data/imgs/flags/{MR.png => mr.png} | Bin data/imgs/flags/{MS.png => ms.png} | Bin data/imgs/flags/{MT.png => mt.png} | Bin data/imgs/flags/{MU.png => mu.png} | Bin data/imgs/flags/{MV.png => mv.png} | Bin data/imgs/flags/{MW.png => mw.png} | Bin data/imgs/flags/{MX.png => mx.png} | Bin data/imgs/flags/{MY.png => my.png} | Bin data/imgs/flags/{MZ.png => mz.png} | Bin data/imgs/flags/{NA.png => na.png} | Bin data/imgs/flags/{NC.png => nc.png} | Bin data/imgs/flags/{NE.png => ne.png} | Bin data/imgs/flags/{NF.png => nf.png} | Bin data/imgs/flags/{NG.png => ng.png} | Bin data/imgs/flags/{NI.png => ni.png} | Bin data/imgs/flags/{NL.png => nl.png} | Bin data/imgs/flags/{NO.png => no.png} | Bin data/imgs/flags/{NP.png => np.png} | Bin data/imgs/flags/{NR.png => nr.png} | Bin data/imgs/flags/{NU.png => nu.png} | Bin data/imgs/flags/{NZ.png => nz.png} | Bin data/imgs/flags/{OM.png => om.png} | Bin data/imgs/flags/{PA.png => pa.png} | Bin data/imgs/flags/{PE.png => pe.png} | Bin data/imgs/flags/{PF.png => pf.png} | Bin data/imgs/flags/{PG.png => pg.png} | Bin data/imgs/flags/{PH.png => ph.png} | Bin data/imgs/flags/{PK.png => pk.png} | Bin data/imgs/flags/{PL.png => pl.png} | Bin data/imgs/flags/{PN.png => pn.png} | Bin data/imgs/flags/{PR.png => pr.png} | Bin data/imgs/flags/{PS.png => ps.png} | Bin data/imgs/flags/{PT.png => pt.png} | Bin data/imgs/flags/{PW.png => pw.png} | Bin data/imgs/flags/{PY.png => py.png} | Bin data/imgs/flags/{QA.png => qa.png} | Bin data/imgs/flags/{RE.png => re.png} | Bin data/imgs/flags/{RO.png => ro.png} | Bin data/imgs/flags/{RS.png => rs.png} | Bin data/imgs/flags/{RU.png => ru.png} | Bin data/imgs/flags/{RW.png => rw.png} | Bin data/imgs/flags/{SA.png => sa.png} | Bin data/imgs/flags/{SB.png => sb.png} | Bin data/imgs/flags/{SC.png => sc.png} | Bin data/imgs/flags/{SD.png => sd.png} | Bin data/imgs/flags/{SE.png => se.png} | Bin data/imgs/flags/{SG.png => sg.png} | Bin data/imgs/flags/{SH.png => sh.png} | Bin data/imgs/flags/{SI.png => si.png} | Bin data/imgs/flags/{SK.png => sk.png} | Bin data/imgs/flags/{SL.png => sl.png} | Bin data/imgs/flags/{SM.png => sm.png} | Bin data/imgs/flags/{SN.png => sn.png} | Bin data/imgs/flags/{SO.png => so.png} | Bin data/imgs/flags/{SR.png => sr.png} | Bin data/imgs/flags/{SS.png => ss.png} | Bin data/imgs/flags/{ST.png => st.png} | Bin data/imgs/flags/{SV.png => sv.png} | Bin data/imgs/flags/{SX.png => sx.png} | Bin data/imgs/flags/{SY.png => sy.png} | Bin data/imgs/flags/{SZ.png => sz.png} | Bin data/imgs/flags/{TC.png => tc.png} | Bin data/imgs/flags/{TD.png => td.png} | Bin data/imgs/flags/{TF.png => tf.png} | Bin data/imgs/flags/{TG.png => tg.png} | Bin data/imgs/flags/{TH.png => th.png} | Bin data/imgs/flags/{TJ.png => tj.png} | Bin data/imgs/flags/{TK.png => tk.png} | Bin data/imgs/flags/{TL.png => tl.png} | Bin data/imgs/flags/{TM.png => tm.png} | Bin data/imgs/flags/{TN.png => tn.png} | Bin data/imgs/flags/{TO.png => to.png} | Bin data/imgs/flags/{TR.png => tr.png} | Bin data/imgs/flags/{TT.png => tt.png} | Bin data/imgs/flags/{TV.png => tv.png} | Bin data/imgs/flags/{TW.png => tw.png} | Bin data/imgs/flags/{TZ.png => tz.png} | Bin data/imgs/flags/{UA.png => ua.png} | Bin data/imgs/flags/{UG.png => ug.png} | Bin data/imgs/flags/{_unknown.png => unknown.png} | Bin data/imgs/flags/{US.png => us.png} | Bin data/imgs/flags/{UY.png => uy.png} | Bin data/imgs/flags/{UZ.png => uz.png} | Bin data/imgs/flags/{VA.png => va.png} | Bin data/imgs/flags/{VC.png => vc.png} | Bin data/imgs/flags/{VE.png => ve.png} | Bin data/imgs/flags/{VG.png => vg.png} | Bin data/imgs/flags/{VI.png => vi.png} | Bin data/imgs/flags/{VN.png => vn.png} | Bin data/imgs/flags/{VU.png => vu.png} | Bin data/imgs/flags/{WF.png => wf.png} | Bin data/imgs/flags/{WS.png => ws.png} | Bin data/imgs/flags/{YE.png => ye.png} | Bin data/imgs/flags/{YT.png => yt.png} | Bin data/imgs/flags/{ZA.png => za.png} | Bin data/imgs/flags/{ZM.png => zm.png} | Bin data/imgs/flags/{ZW.png => zw.png} | Bin .../{placeholder.svg => unknown.svg} | 0 data/seed_data/iso_639_1.csv | 186 ++++++++++++++++++ data/seed_data/skills.csv | 5 + ki/commands.py | 31 ++- ki/models.py | 7 +- ki/routes.py | 82 +++++--- ...n.py => ad03a0d79a90_initial_migration.py} | 10 +- 255 files changed, 296 insertions(+), 35 deletions(-) rename data/imgs/flags/{AD.png => ad.png} (100%) rename data/imgs/flags/{AE.png => ae.png} (100%) rename data/imgs/flags/{AF.png => af.png} (100%) rename data/imgs/flags/{AG.png => ag.png} (100%) rename data/imgs/flags/{AI.png => ai.png} (100%) rename data/imgs/flags/{AL.png => al.png} (100%) rename data/imgs/flags/{AM.png => am.png} (100%) rename data/imgs/flags/{AN.png => an.png} (100%) rename data/imgs/flags/{AO.png => ao.png} (100%) rename data/imgs/flags/{AQ.png => aq.png} (100%) rename data/imgs/flags/{AR.png => ar.png} (100%) rename data/imgs/flags/{AS.png => as.png} (100%) rename data/imgs/flags/{AT.png => at.png} (100%) rename data/imgs/flags/{AU.png => au.png} (100%) rename data/imgs/flags/{AW.png => aw.png} (100%) rename data/imgs/flags/{AX.png => ax.png} (100%) rename data/imgs/flags/{AZ.png => az.png} (100%) rename data/imgs/flags/{BA.png => ba.png} (100%) rename data/imgs/flags/{BB.png => bb.png} (100%) rename data/imgs/flags/{BD.png => bd.png} (100%) rename data/imgs/flags/{BE.png => be.png} (100%) rename data/imgs/flags/{BF.png => bf.png} (100%) rename data/imgs/flags/{BG.png => bg.png} (100%) rename data/imgs/flags/{BH.png => bh.png} (100%) rename data/imgs/flags/{BI.png => bi.png} (100%) rename data/imgs/flags/{BJ.png => bj.png} (100%) rename data/imgs/flags/{BL.png => bl.png} (100%) rename data/imgs/flags/{BM.png => bm.png} (100%) rename data/imgs/flags/{BN.png => bn.png} (100%) rename data/imgs/flags/{BO.png => bo.png} (100%) rename data/imgs/flags/{BR.png => br.png} (100%) rename data/imgs/flags/{BS.png => bs.png} (100%) rename data/imgs/flags/{BT.png => bt.png} (100%) rename data/imgs/flags/{BW.png => bw.png} (100%) rename data/imgs/flags/{BY.png => by.png} (100%) rename data/imgs/flags/{BZ.png => bz.png} (100%) rename data/imgs/flags/{CA.png => ca.png} (100%) rename data/imgs/flags/{CC.png => cc.png} (100%) rename data/imgs/flags/{CD.png => cd.png} (100%) rename data/imgs/flags/{CF.png => cf.png} (100%) rename data/imgs/flags/{CG.png => cg.png} (100%) rename data/imgs/flags/{CH.png => ch.png} (100%) rename data/imgs/flags/{CI.png => ci.png} (100%) rename data/imgs/flags/{CK.png => ck.png} (100%) rename data/imgs/flags/{CL.png => cl.png} (100%) rename data/imgs/flags/{CM.png => cm.png} (100%) rename data/imgs/flags/{CN.png => cn.png} (100%) rename data/imgs/flags/{CO.png => co.png} (100%) rename data/imgs/flags/{CR.png => cr.png} (100%) rename data/imgs/flags/{CT.png => ct.png} (100%) rename data/imgs/flags/{CU.png => cu.png} (100%) rename data/imgs/flags/{CV.png => cv.png} (100%) rename data/imgs/flags/{CW.png => cw.png} (100%) rename data/imgs/flags/{CX.png => cx.png} (100%) rename data/imgs/flags/{CY.png => cy.png} (100%) rename data/imgs/flags/{CZ.png => cz.png} (100%) rename data/imgs/flags/{DE.png => de.png} (100%) rename data/imgs/flags/{DJ.png => dj.png} (100%) rename data/imgs/flags/{DK.png => dk.png} (100%) rename data/imgs/flags/{DM.png => dm.png} (100%) rename data/imgs/flags/{DO.png => do.png} (100%) rename data/imgs/flags/{DZ.png => dz.png} (100%) rename data/imgs/flags/{EC.png => ec.png} (100%) rename data/imgs/flags/{EE.png => ee.png} (100%) rename data/imgs/flags/{EG.png => eg.png} (100%) rename data/imgs/flags/{EH.png => eh.png} (100%) rename data/imgs/flags/{ER.png => er.png} (100%) rename data/imgs/flags/{ES.png => es.png} (100%) rename data/imgs/flags/{ET.png => et.png} (100%) rename data/imgs/flags/{EU.png => eu.png} (100%) rename data/imgs/flags/{FI.png => fi.png} (100%) rename data/imgs/flags/{FJ.png => fj.png} (100%) rename data/imgs/flags/{FK.png => fk.png} (100%) rename data/imgs/flags/{FM.png => fm.png} (100%) rename data/imgs/flags/{FO.png => fo.png} (100%) rename data/imgs/flags/{FR.png => fr.png} (100%) rename data/imgs/flags/{GA.png => ga.png} (100%) rename data/imgs/flags/{GB.png => gb.png} (100%) rename data/imgs/flags/{GD.png => gd.png} (100%) rename data/imgs/flags/{GE.png => ge.png} (100%) rename data/imgs/flags/{GG.png => gg.png} (100%) rename data/imgs/flags/{GH.png => gh.png} (100%) rename data/imgs/flags/{GI.png => gi.png} (100%) rename data/imgs/flags/{GL.png => gl.png} (100%) rename data/imgs/flags/{GM.png => gm.png} (100%) rename data/imgs/flags/{GN.png => gn.png} (100%) rename data/imgs/flags/{GQ.png => gq.png} (100%) rename data/imgs/flags/{GR.png => gr.png} (100%) rename data/imgs/flags/{GS.png => gs.png} (100%) rename data/imgs/flags/{GT.png => gt.png} (100%) rename data/imgs/flags/{GU.png => gu.png} (100%) rename data/imgs/flags/{GW.png => gw.png} (100%) rename data/imgs/flags/{GY.png => gy.png} (100%) rename data/imgs/flags/{HK.png => hk.png} (100%) rename data/imgs/flags/{HN.png => hn.png} (100%) rename data/imgs/flags/{HR.png => hr.png} (100%) rename data/imgs/flags/{HT.png => ht.png} (100%) rename data/imgs/flags/{HU.png => hu.png} (100%) rename data/imgs/flags/{IC.png => ic.png} (100%) rename data/imgs/flags/{ID.png => id.png} (100%) rename data/imgs/flags/{IE.png => ie.png} (100%) rename data/imgs/flags/{IL.png => il.png} (100%) rename data/imgs/flags/{IM.png => im.png} (100%) rename data/imgs/flags/{IN.png => in.png} (100%) rename data/imgs/flags/{IQ.png => iq.png} (100%) rename data/imgs/flags/{IR.png => ir.png} (100%) rename data/imgs/flags/{IS.png => is.png} (100%) rename data/imgs/flags/{IT.png => it.png} (100%) rename data/imgs/flags/{JE.png => je.png} (100%) rename data/imgs/flags/{JM.png => jm.png} (100%) rename data/imgs/flags/{JO.png => jo.png} (100%) rename data/imgs/flags/{JP.png => jp.png} (100%) rename data/imgs/flags/{KE.png => ke.png} (100%) rename data/imgs/flags/{KG.png => kg.png} (100%) rename data/imgs/flags/{KH.png => kh.png} (100%) rename data/imgs/flags/{KI.png => ki.png} (100%) rename data/imgs/flags/{KM.png => km.png} (100%) rename data/imgs/flags/{KN.png => kn.png} (100%) rename data/imgs/flags/{KP.png => kp.png} (100%) rename data/imgs/flags/{KR.png => kr.png} (100%) rename data/imgs/flags/{KW.png => kw.png} (100%) rename data/imgs/flags/{KY.png => ky.png} (100%) rename data/imgs/flags/{KZ.png => kz.png} (100%) rename data/imgs/flags/{LA.png => la.png} (100%) rename data/imgs/flags/{LB.png => lb.png} (100%) rename data/imgs/flags/{LC.png => lc.png} (100%) rename data/imgs/flags/{LI.png => li.png} (100%) rename data/imgs/flags/{LK.png => lk.png} (100%) rename data/imgs/flags/{LR.png => lr.png} (100%) rename data/imgs/flags/{LS.png => ls.png} (100%) rename data/imgs/flags/{LT.png => lt.png} (100%) rename data/imgs/flags/{LU.png => lu.png} (100%) rename data/imgs/flags/{LV.png => lv.png} (100%) rename data/imgs/flags/{LY.png => ly.png} (100%) rename data/imgs/flags/{MA.png => ma.png} (100%) rename data/imgs/flags/{MC.png => mc.png} (100%) rename data/imgs/flags/{MD.png => md.png} (100%) rename data/imgs/flags/{ME.png => me.png} (100%) rename data/imgs/flags/{MF.png => mf.png} (100%) rename data/imgs/flags/{MG.png => mg.png} (100%) rename data/imgs/flags/{MH.png => mh.png} (100%) rename data/imgs/flags/{MK.png => mk.png} (100%) rename data/imgs/flags/{ML.png => ml.png} (100%) rename data/imgs/flags/{MM.png => mm.png} (100%) rename data/imgs/flags/{MN.png => mn.png} (100%) rename data/imgs/flags/{MO.png => mo.png} (100%) rename data/imgs/flags/{MP.png => mp.png} (100%) rename data/imgs/flags/{MQ.png => mq.png} (100%) rename data/imgs/flags/{MR.png => mr.png} (100%) rename data/imgs/flags/{MS.png => ms.png} (100%) rename data/imgs/flags/{MT.png => mt.png} (100%) rename data/imgs/flags/{MU.png => mu.png} (100%) rename data/imgs/flags/{MV.png => mv.png} (100%) rename data/imgs/flags/{MW.png => mw.png} (100%) rename data/imgs/flags/{MX.png => mx.png} (100%) rename data/imgs/flags/{MY.png => my.png} (100%) rename data/imgs/flags/{MZ.png => mz.png} (100%) rename data/imgs/flags/{NA.png => na.png} (100%) rename data/imgs/flags/{NC.png => nc.png} (100%) rename data/imgs/flags/{NE.png => ne.png} (100%) rename data/imgs/flags/{NF.png => nf.png} (100%) rename data/imgs/flags/{NG.png => ng.png} (100%) rename data/imgs/flags/{NI.png => ni.png} (100%) rename data/imgs/flags/{NL.png => nl.png} (100%) rename data/imgs/flags/{NO.png => no.png} (100%) rename data/imgs/flags/{NP.png => np.png} (100%) rename data/imgs/flags/{NR.png => nr.png} (100%) rename data/imgs/flags/{NU.png => nu.png} (100%) rename data/imgs/flags/{NZ.png => nz.png} (100%) rename data/imgs/flags/{OM.png => om.png} (100%) rename data/imgs/flags/{PA.png => pa.png} (100%) rename data/imgs/flags/{PE.png => pe.png} (100%) rename data/imgs/flags/{PF.png => pf.png} (100%) rename data/imgs/flags/{PG.png => pg.png} (100%) rename data/imgs/flags/{PH.png => ph.png} (100%) rename data/imgs/flags/{PK.png => pk.png} (100%) rename data/imgs/flags/{PL.png => pl.png} (100%) rename data/imgs/flags/{PN.png => pn.png} (100%) rename data/imgs/flags/{PR.png => pr.png} (100%) rename data/imgs/flags/{PS.png => ps.png} (100%) rename data/imgs/flags/{PT.png => pt.png} (100%) rename data/imgs/flags/{PW.png => pw.png} (100%) rename data/imgs/flags/{PY.png => py.png} (100%) rename data/imgs/flags/{QA.png => qa.png} (100%) rename data/imgs/flags/{RE.png => re.png} (100%) rename data/imgs/flags/{RO.png => ro.png} (100%) rename data/imgs/flags/{RS.png => rs.png} (100%) rename data/imgs/flags/{RU.png => ru.png} (100%) rename data/imgs/flags/{RW.png => rw.png} (100%) rename data/imgs/flags/{SA.png => sa.png} (100%) rename data/imgs/flags/{SB.png => sb.png} (100%) rename data/imgs/flags/{SC.png => sc.png} (100%) rename data/imgs/flags/{SD.png => sd.png} (100%) rename data/imgs/flags/{SE.png => se.png} (100%) rename data/imgs/flags/{SG.png => sg.png} (100%) rename data/imgs/flags/{SH.png => sh.png} (100%) rename data/imgs/flags/{SI.png => si.png} (100%) rename data/imgs/flags/{SK.png => sk.png} (100%) rename data/imgs/flags/{SL.png => sl.png} (100%) rename data/imgs/flags/{SM.png => sm.png} (100%) rename data/imgs/flags/{SN.png => sn.png} (100%) rename data/imgs/flags/{SO.png => so.png} (100%) rename data/imgs/flags/{SR.png => sr.png} (100%) rename data/imgs/flags/{SS.png => ss.png} (100%) rename data/imgs/flags/{ST.png => st.png} (100%) rename data/imgs/flags/{SV.png => sv.png} (100%) rename data/imgs/flags/{SX.png => sx.png} (100%) rename data/imgs/flags/{SY.png => sy.png} (100%) rename data/imgs/flags/{SZ.png => sz.png} (100%) rename data/imgs/flags/{TC.png => tc.png} (100%) rename data/imgs/flags/{TD.png => td.png} (100%) rename data/imgs/flags/{TF.png => tf.png} (100%) rename data/imgs/flags/{TG.png => tg.png} (100%) rename data/imgs/flags/{TH.png => th.png} (100%) rename data/imgs/flags/{TJ.png => tj.png} (100%) rename data/imgs/flags/{TK.png => tk.png} (100%) rename data/imgs/flags/{TL.png => tl.png} (100%) rename data/imgs/flags/{TM.png => tm.png} (100%) rename data/imgs/flags/{TN.png => tn.png} (100%) rename data/imgs/flags/{TO.png => to.png} (100%) rename data/imgs/flags/{TR.png => tr.png} (100%) rename data/imgs/flags/{TT.png => tt.png} (100%) rename data/imgs/flags/{TV.png => tv.png} (100%) rename data/imgs/flags/{TW.png => tw.png} (100%) rename data/imgs/flags/{TZ.png => tz.png} (100%) rename data/imgs/flags/{UA.png => ua.png} (100%) rename data/imgs/flags/{UG.png => ug.png} (100%) rename data/imgs/flags/{_unknown.png => unknown.png} (100%) rename data/imgs/flags/{US.png => us.png} (100%) rename data/imgs/flags/{UY.png => uy.png} (100%) rename data/imgs/flags/{UZ.png => uz.png} (100%) rename data/imgs/flags/{VA.png => va.png} (100%) rename data/imgs/flags/{VC.png => vc.png} (100%) rename data/imgs/flags/{VE.png => ve.png} (100%) rename data/imgs/flags/{VG.png => vg.png} (100%) rename data/imgs/flags/{VI.png => vi.png} (100%) rename data/imgs/flags/{VN.png => vn.png} (100%) rename data/imgs/flags/{VU.png => vu.png} (100%) rename data/imgs/flags/{WF.png => wf.png} (100%) rename data/imgs/flags/{WS.png => ws.png} (100%) rename data/imgs/flags/{YE.png => ye.png} (100%) rename data/imgs/flags/{YT.png => yt.png} (100%) rename data/imgs/flags/{ZA.png => za.png} (100%) rename data/imgs/flags/{ZM.png => zm.png} (100%) rename data/imgs/flags/{ZW.png => zw.png} (100%) rename data/imgs/skill_icons/{placeholder.svg => unknown.svg} (100%) create mode 100644 data/seed_data/iso_639_1.csv create mode 100644 data/seed_data/skills.csv rename migrations/versions/{4ff86e9f6a43_initial_migration.py => ad03a0d79a90_initial_migration.py} (93%) diff --git a/Pipfile b/Pipfile index c4a479d..f9d9fe1 100644 --- a/Pipfile +++ b/Pipfile @@ -14,3 +14,6 @@ sqlalchemy = "*" [requires] python_version = "3.8" + +[scripts] +clean = "rm data/ki.sqlite" diff --git a/README.md b/README.md index 0e4fab7..b1b2028 100644 --- a/README.md +++ b/README.md @@ -19,3 +19,8 @@ flask run ``` http://localhost:5000/ + +### Quellen + +* [`./data/iso_639_1.csv`](https://de.wikipedia.org/wiki/Liste_der_ISO-639-1-Codes) +* [`./data/imgs/flags`](https://github.com/gosquared/flags) diff --git a/app.py b/app.py index f030561..fd7476b 100644 --- a/app.py +++ b/app.py @@ -10,7 +10,7 @@ load_dotenv(find_dotenv()) app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv("SQLALCHEMY_DATABASE_URI") app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False -app.config["KI_DATA_PATH"] = os.path.dirname(__file__) + "/data" +app.config["KI_DATA_DIR"] = os.path.dirname(__file__) + "/data" db = SQLAlchemy(app) migrate = Migrate(app, db) diff --git a/data/imgs/flags/AD.png b/data/imgs/flags/ad.png similarity index 100% rename from data/imgs/flags/AD.png rename to data/imgs/flags/ad.png diff --git a/data/imgs/flags/AE.png b/data/imgs/flags/ae.png similarity index 100% rename from data/imgs/flags/AE.png rename to data/imgs/flags/ae.png diff --git a/data/imgs/flags/AF.png b/data/imgs/flags/af.png similarity index 100% rename from data/imgs/flags/AF.png rename to data/imgs/flags/af.png diff --git a/data/imgs/flags/AG.png b/data/imgs/flags/ag.png similarity index 100% rename from data/imgs/flags/AG.png rename to data/imgs/flags/ag.png diff --git a/data/imgs/flags/AI.png b/data/imgs/flags/ai.png similarity index 100% rename from data/imgs/flags/AI.png rename to data/imgs/flags/ai.png diff --git a/data/imgs/flags/AL.png b/data/imgs/flags/al.png similarity index 100% rename from data/imgs/flags/AL.png rename to data/imgs/flags/al.png diff --git a/data/imgs/flags/AM.png b/data/imgs/flags/am.png similarity index 100% rename from data/imgs/flags/AM.png rename to data/imgs/flags/am.png diff --git a/data/imgs/flags/AN.png b/data/imgs/flags/an.png similarity index 100% rename from data/imgs/flags/AN.png rename to data/imgs/flags/an.png diff --git a/data/imgs/flags/AO.png b/data/imgs/flags/ao.png similarity index 100% rename from data/imgs/flags/AO.png rename to data/imgs/flags/ao.png diff --git a/data/imgs/flags/AQ.png b/data/imgs/flags/aq.png similarity index 100% rename from data/imgs/flags/AQ.png rename to data/imgs/flags/aq.png diff --git a/data/imgs/flags/AR.png b/data/imgs/flags/ar.png similarity index 100% rename from data/imgs/flags/AR.png rename to data/imgs/flags/ar.png diff --git a/data/imgs/flags/AS.png b/data/imgs/flags/as.png similarity index 100% rename from data/imgs/flags/AS.png rename to data/imgs/flags/as.png diff --git a/data/imgs/flags/AT.png b/data/imgs/flags/at.png similarity index 100% rename from data/imgs/flags/AT.png rename to data/imgs/flags/at.png diff --git a/data/imgs/flags/AU.png b/data/imgs/flags/au.png similarity index 100% rename from data/imgs/flags/AU.png rename to data/imgs/flags/au.png diff --git a/data/imgs/flags/AW.png b/data/imgs/flags/aw.png similarity index 100% rename from data/imgs/flags/AW.png rename to data/imgs/flags/aw.png diff --git a/data/imgs/flags/AX.png b/data/imgs/flags/ax.png similarity index 100% rename from data/imgs/flags/AX.png rename to data/imgs/flags/ax.png diff --git a/data/imgs/flags/AZ.png b/data/imgs/flags/az.png similarity index 100% rename from data/imgs/flags/AZ.png rename to data/imgs/flags/az.png diff --git a/data/imgs/flags/BA.png b/data/imgs/flags/ba.png similarity index 100% rename from data/imgs/flags/BA.png rename to data/imgs/flags/ba.png diff --git a/data/imgs/flags/BB.png b/data/imgs/flags/bb.png similarity index 100% rename from data/imgs/flags/BB.png rename to data/imgs/flags/bb.png diff --git a/data/imgs/flags/BD.png b/data/imgs/flags/bd.png similarity index 100% rename from data/imgs/flags/BD.png rename to data/imgs/flags/bd.png diff --git a/data/imgs/flags/BE.png b/data/imgs/flags/be.png similarity index 100% rename from data/imgs/flags/BE.png rename to data/imgs/flags/be.png diff --git a/data/imgs/flags/BF.png b/data/imgs/flags/bf.png similarity index 100% rename from data/imgs/flags/BF.png rename to data/imgs/flags/bf.png diff --git a/data/imgs/flags/BG.png b/data/imgs/flags/bg.png similarity index 100% rename from data/imgs/flags/BG.png rename to data/imgs/flags/bg.png diff --git a/data/imgs/flags/BH.png b/data/imgs/flags/bh.png similarity index 100% rename from data/imgs/flags/BH.png rename to data/imgs/flags/bh.png diff --git a/data/imgs/flags/BI.png b/data/imgs/flags/bi.png similarity index 100% rename from data/imgs/flags/BI.png rename to data/imgs/flags/bi.png diff --git a/data/imgs/flags/BJ.png b/data/imgs/flags/bj.png similarity index 100% rename from data/imgs/flags/BJ.png rename to data/imgs/flags/bj.png diff --git a/data/imgs/flags/BL.png b/data/imgs/flags/bl.png similarity index 100% rename from data/imgs/flags/BL.png rename to data/imgs/flags/bl.png diff --git a/data/imgs/flags/BM.png b/data/imgs/flags/bm.png similarity index 100% rename from data/imgs/flags/BM.png rename to data/imgs/flags/bm.png diff --git a/data/imgs/flags/BN.png b/data/imgs/flags/bn.png similarity index 100% rename from data/imgs/flags/BN.png rename to data/imgs/flags/bn.png diff --git a/data/imgs/flags/BO.png b/data/imgs/flags/bo.png similarity index 100% rename from data/imgs/flags/BO.png rename to data/imgs/flags/bo.png diff --git a/data/imgs/flags/BR.png b/data/imgs/flags/br.png similarity index 100% rename from data/imgs/flags/BR.png rename to data/imgs/flags/br.png diff --git a/data/imgs/flags/BS.png b/data/imgs/flags/bs.png similarity index 100% rename from data/imgs/flags/BS.png rename to data/imgs/flags/bs.png diff --git a/data/imgs/flags/BT.png b/data/imgs/flags/bt.png similarity index 100% rename from data/imgs/flags/BT.png rename to data/imgs/flags/bt.png diff --git a/data/imgs/flags/BW.png b/data/imgs/flags/bw.png similarity index 100% rename from data/imgs/flags/BW.png rename to data/imgs/flags/bw.png diff --git a/data/imgs/flags/BY.png b/data/imgs/flags/by.png similarity index 100% rename from data/imgs/flags/BY.png rename to data/imgs/flags/by.png diff --git a/data/imgs/flags/BZ.png b/data/imgs/flags/bz.png similarity index 100% rename from data/imgs/flags/BZ.png rename to data/imgs/flags/bz.png diff --git a/data/imgs/flags/CA.png b/data/imgs/flags/ca.png similarity index 100% rename from data/imgs/flags/CA.png rename to data/imgs/flags/ca.png diff --git a/data/imgs/flags/CC.png b/data/imgs/flags/cc.png similarity index 100% rename from data/imgs/flags/CC.png rename to data/imgs/flags/cc.png diff --git a/data/imgs/flags/CD.png b/data/imgs/flags/cd.png similarity index 100% rename from data/imgs/flags/CD.png rename to data/imgs/flags/cd.png diff --git a/data/imgs/flags/CF.png b/data/imgs/flags/cf.png similarity index 100% rename from data/imgs/flags/CF.png rename to data/imgs/flags/cf.png diff --git a/data/imgs/flags/CG.png b/data/imgs/flags/cg.png similarity index 100% rename from data/imgs/flags/CG.png rename to data/imgs/flags/cg.png diff --git a/data/imgs/flags/CH.png b/data/imgs/flags/ch.png similarity index 100% rename from data/imgs/flags/CH.png rename to data/imgs/flags/ch.png diff --git a/data/imgs/flags/CI.png b/data/imgs/flags/ci.png similarity index 100% rename from data/imgs/flags/CI.png rename to data/imgs/flags/ci.png diff --git a/data/imgs/flags/CK.png b/data/imgs/flags/ck.png similarity index 100% rename from data/imgs/flags/CK.png rename to data/imgs/flags/ck.png diff --git a/data/imgs/flags/CL.png b/data/imgs/flags/cl.png similarity index 100% rename from data/imgs/flags/CL.png rename to data/imgs/flags/cl.png diff --git a/data/imgs/flags/CM.png b/data/imgs/flags/cm.png similarity index 100% rename from data/imgs/flags/CM.png rename to data/imgs/flags/cm.png diff --git a/data/imgs/flags/CN.png b/data/imgs/flags/cn.png similarity index 100% rename from data/imgs/flags/CN.png rename to data/imgs/flags/cn.png diff --git a/data/imgs/flags/CO.png b/data/imgs/flags/co.png similarity index 100% rename from data/imgs/flags/CO.png rename to data/imgs/flags/co.png diff --git a/data/imgs/flags/CR.png b/data/imgs/flags/cr.png similarity index 100% rename from data/imgs/flags/CR.png rename to data/imgs/flags/cr.png diff --git a/data/imgs/flags/CT.png b/data/imgs/flags/ct.png similarity index 100% rename from data/imgs/flags/CT.png rename to data/imgs/flags/ct.png diff --git a/data/imgs/flags/CU.png b/data/imgs/flags/cu.png similarity index 100% rename from data/imgs/flags/CU.png rename to data/imgs/flags/cu.png diff --git a/data/imgs/flags/CV.png b/data/imgs/flags/cv.png similarity index 100% rename from data/imgs/flags/CV.png rename to data/imgs/flags/cv.png diff --git a/data/imgs/flags/CW.png b/data/imgs/flags/cw.png similarity index 100% rename from data/imgs/flags/CW.png rename to data/imgs/flags/cw.png diff --git a/data/imgs/flags/CX.png b/data/imgs/flags/cx.png similarity index 100% rename from data/imgs/flags/CX.png rename to data/imgs/flags/cx.png diff --git a/data/imgs/flags/CY.png b/data/imgs/flags/cy.png similarity index 100% rename from data/imgs/flags/CY.png rename to data/imgs/flags/cy.png diff --git a/data/imgs/flags/CZ.png b/data/imgs/flags/cz.png similarity index 100% rename from data/imgs/flags/CZ.png rename to data/imgs/flags/cz.png diff --git a/data/imgs/flags/DE.png b/data/imgs/flags/de.png similarity index 100% rename from data/imgs/flags/DE.png rename to data/imgs/flags/de.png diff --git a/data/imgs/flags/DJ.png b/data/imgs/flags/dj.png similarity index 100% rename from data/imgs/flags/DJ.png rename to data/imgs/flags/dj.png diff --git a/data/imgs/flags/DK.png b/data/imgs/flags/dk.png similarity index 100% rename from data/imgs/flags/DK.png rename to data/imgs/flags/dk.png diff --git a/data/imgs/flags/DM.png b/data/imgs/flags/dm.png similarity index 100% rename from data/imgs/flags/DM.png rename to data/imgs/flags/dm.png diff --git a/data/imgs/flags/DO.png b/data/imgs/flags/do.png similarity index 100% rename from data/imgs/flags/DO.png rename to data/imgs/flags/do.png diff --git a/data/imgs/flags/DZ.png b/data/imgs/flags/dz.png similarity index 100% rename from data/imgs/flags/DZ.png rename to data/imgs/flags/dz.png diff --git a/data/imgs/flags/EC.png b/data/imgs/flags/ec.png similarity index 100% rename from data/imgs/flags/EC.png rename to data/imgs/flags/ec.png diff --git a/data/imgs/flags/EE.png b/data/imgs/flags/ee.png similarity index 100% rename from data/imgs/flags/EE.png rename to data/imgs/flags/ee.png diff --git a/data/imgs/flags/EG.png b/data/imgs/flags/eg.png similarity index 100% rename from data/imgs/flags/EG.png rename to data/imgs/flags/eg.png diff --git a/data/imgs/flags/EH.png b/data/imgs/flags/eh.png similarity index 100% rename from data/imgs/flags/EH.png rename to data/imgs/flags/eh.png diff --git a/data/imgs/flags/ER.png b/data/imgs/flags/er.png similarity index 100% rename from data/imgs/flags/ER.png rename to data/imgs/flags/er.png diff --git a/data/imgs/flags/ES.png b/data/imgs/flags/es.png similarity index 100% rename from data/imgs/flags/ES.png rename to data/imgs/flags/es.png diff --git a/data/imgs/flags/ET.png b/data/imgs/flags/et.png similarity index 100% rename from data/imgs/flags/ET.png rename to data/imgs/flags/et.png diff --git a/data/imgs/flags/EU.png b/data/imgs/flags/eu.png similarity index 100% rename from data/imgs/flags/EU.png rename to data/imgs/flags/eu.png diff --git a/data/imgs/flags/FI.png b/data/imgs/flags/fi.png similarity index 100% rename from data/imgs/flags/FI.png rename to data/imgs/flags/fi.png diff --git a/data/imgs/flags/FJ.png b/data/imgs/flags/fj.png similarity index 100% rename from data/imgs/flags/FJ.png rename to data/imgs/flags/fj.png diff --git a/data/imgs/flags/FK.png b/data/imgs/flags/fk.png similarity index 100% rename from data/imgs/flags/FK.png rename to data/imgs/flags/fk.png diff --git a/data/imgs/flags/FM.png b/data/imgs/flags/fm.png similarity index 100% rename from data/imgs/flags/FM.png rename to data/imgs/flags/fm.png diff --git a/data/imgs/flags/FO.png b/data/imgs/flags/fo.png similarity index 100% rename from data/imgs/flags/FO.png rename to data/imgs/flags/fo.png diff --git a/data/imgs/flags/FR.png b/data/imgs/flags/fr.png similarity index 100% rename from data/imgs/flags/FR.png rename to data/imgs/flags/fr.png diff --git a/data/imgs/flags/GA.png b/data/imgs/flags/ga.png similarity index 100% rename from data/imgs/flags/GA.png rename to data/imgs/flags/ga.png diff --git a/data/imgs/flags/GB.png b/data/imgs/flags/gb.png similarity index 100% rename from data/imgs/flags/GB.png rename to data/imgs/flags/gb.png diff --git a/data/imgs/flags/GD.png b/data/imgs/flags/gd.png similarity index 100% rename from data/imgs/flags/GD.png rename to data/imgs/flags/gd.png diff --git a/data/imgs/flags/GE.png b/data/imgs/flags/ge.png similarity index 100% rename from data/imgs/flags/GE.png rename to data/imgs/flags/ge.png diff --git a/data/imgs/flags/GG.png b/data/imgs/flags/gg.png similarity index 100% rename from data/imgs/flags/GG.png rename to data/imgs/flags/gg.png diff --git a/data/imgs/flags/GH.png b/data/imgs/flags/gh.png similarity index 100% rename from data/imgs/flags/GH.png rename to data/imgs/flags/gh.png diff --git a/data/imgs/flags/GI.png b/data/imgs/flags/gi.png similarity index 100% rename from data/imgs/flags/GI.png rename to data/imgs/flags/gi.png diff --git a/data/imgs/flags/GL.png b/data/imgs/flags/gl.png similarity index 100% rename from data/imgs/flags/GL.png rename to data/imgs/flags/gl.png diff --git a/data/imgs/flags/GM.png b/data/imgs/flags/gm.png similarity index 100% rename from data/imgs/flags/GM.png rename to data/imgs/flags/gm.png diff --git a/data/imgs/flags/GN.png b/data/imgs/flags/gn.png similarity index 100% rename from data/imgs/flags/GN.png rename to data/imgs/flags/gn.png diff --git a/data/imgs/flags/GQ.png b/data/imgs/flags/gq.png similarity index 100% rename from data/imgs/flags/GQ.png rename to data/imgs/flags/gq.png diff --git a/data/imgs/flags/GR.png b/data/imgs/flags/gr.png similarity index 100% rename from data/imgs/flags/GR.png rename to data/imgs/flags/gr.png diff --git a/data/imgs/flags/GS.png b/data/imgs/flags/gs.png similarity index 100% rename from data/imgs/flags/GS.png rename to data/imgs/flags/gs.png diff --git a/data/imgs/flags/GT.png b/data/imgs/flags/gt.png similarity index 100% rename from data/imgs/flags/GT.png rename to data/imgs/flags/gt.png diff --git a/data/imgs/flags/GU.png b/data/imgs/flags/gu.png similarity index 100% rename from data/imgs/flags/GU.png rename to data/imgs/flags/gu.png diff --git a/data/imgs/flags/GW.png b/data/imgs/flags/gw.png similarity index 100% rename from data/imgs/flags/GW.png rename to data/imgs/flags/gw.png diff --git a/data/imgs/flags/GY.png b/data/imgs/flags/gy.png similarity index 100% rename from data/imgs/flags/GY.png rename to data/imgs/flags/gy.png diff --git a/data/imgs/flags/HK.png b/data/imgs/flags/hk.png similarity index 100% rename from data/imgs/flags/HK.png rename to data/imgs/flags/hk.png diff --git a/data/imgs/flags/HN.png b/data/imgs/flags/hn.png similarity index 100% rename from data/imgs/flags/HN.png rename to data/imgs/flags/hn.png diff --git a/data/imgs/flags/HR.png b/data/imgs/flags/hr.png similarity index 100% rename from data/imgs/flags/HR.png rename to data/imgs/flags/hr.png diff --git a/data/imgs/flags/HT.png b/data/imgs/flags/ht.png similarity index 100% rename from data/imgs/flags/HT.png rename to data/imgs/flags/ht.png diff --git a/data/imgs/flags/HU.png b/data/imgs/flags/hu.png similarity index 100% rename from data/imgs/flags/HU.png rename to data/imgs/flags/hu.png diff --git a/data/imgs/flags/IC.png b/data/imgs/flags/ic.png similarity index 100% rename from data/imgs/flags/IC.png rename to data/imgs/flags/ic.png diff --git a/data/imgs/flags/ID.png b/data/imgs/flags/id.png similarity index 100% rename from data/imgs/flags/ID.png rename to data/imgs/flags/id.png diff --git a/data/imgs/flags/IE.png b/data/imgs/flags/ie.png similarity index 100% rename from data/imgs/flags/IE.png rename to data/imgs/flags/ie.png diff --git a/data/imgs/flags/IL.png b/data/imgs/flags/il.png similarity index 100% rename from data/imgs/flags/IL.png rename to data/imgs/flags/il.png diff --git a/data/imgs/flags/IM.png b/data/imgs/flags/im.png similarity index 100% rename from data/imgs/flags/IM.png rename to data/imgs/flags/im.png diff --git a/data/imgs/flags/IN.png b/data/imgs/flags/in.png similarity index 100% rename from data/imgs/flags/IN.png rename to data/imgs/flags/in.png diff --git a/data/imgs/flags/IQ.png b/data/imgs/flags/iq.png similarity index 100% rename from data/imgs/flags/IQ.png rename to data/imgs/flags/iq.png diff --git a/data/imgs/flags/IR.png b/data/imgs/flags/ir.png similarity index 100% rename from data/imgs/flags/IR.png rename to data/imgs/flags/ir.png diff --git a/data/imgs/flags/IS.png b/data/imgs/flags/is.png similarity index 100% rename from data/imgs/flags/IS.png rename to data/imgs/flags/is.png diff --git a/data/imgs/flags/IT.png b/data/imgs/flags/it.png similarity index 100% rename from data/imgs/flags/IT.png rename to data/imgs/flags/it.png diff --git a/data/imgs/flags/JE.png b/data/imgs/flags/je.png similarity index 100% rename from data/imgs/flags/JE.png rename to data/imgs/flags/je.png diff --git a/data/imgs/flags/JM.png b/data/imgs/flags/jm.png similarity index 100% rename from data/imgs/flags/JM.png rename to data/imgs/flags/jm.png diff --git a/data/imgs/flags/JO.png b/data/imgs/flags/jo.png similarity index 100% rename from data/imgs/flags/JO.png rename to data/imgs/flags/jo.png diff --git a/data/imgs/flags/JP.png b/data/imgs/flags/jp.png similarity index 100% rename from data/imgs/flags/JP.png rename to data/imgs/flags/jp.png diff --git a/data/imgs/flags/KE.png b/data/imgs/flags/ke.png similarity index 100% rename from data/imgs/flags/KE.png rename to data/imgs/flags/ke.png diff --git a/data/imgs/flags/KG.png b/data/imgs/flags/kg.png similarity index 100% rename from data/imgs/flags/KG.png rename to data/imgs/flags/kg.png diff --git a/data/imgs/flags/KH.png b/data/imgs/flags/kh.png similarity index 100% rename from data/imgs/flags/KH.png rename to data/imgs/flags/kh.png diff --git a/data/imgs/flags/KI.png b/data/imgs/flags/ki.png similarity index 100% rename from data/imgs/flags/KI.png rename to data/imgs/flags/ki.png diff --git a/data/imgs/flags/KM.png b/data/imgs/flags/km.png similarity index 100% rename from data/imgs/flags/KM.png rename to data/imgs/flags/km.png diff --git a/data/imgs/flags/KN.png b/data/imgs/flags/kn.png similarity index 100% rename from data/imgs/flags/KN.png rename to data/imgs/flags/kn.png diff --git a/data/imgs/flags/KP.png b/data/imgs/flags/kp.png similarity index 100% rename from data/imgs/flags/KP.png rename to data/imgs/flags/kp.png diff --git a/data/imgs/flags/KR.png b/data/imgs/flags/kr.png similarity index 100% rename from data/imgs/flags/KR.png rename to data/imgs/flags/kr.png diff --git a/data/imgs/flags/KW.png b/data/imgs/flags/kw.png similarity index 100% rename from data/imgs/flags/KW.png rename to data/imgs/flags/kw.png diff --git a/data/imgs/flags/KY.png b/data/imgs/flags/ky.png similarity index 100% rename from data/imgs/flags/KY.png rename to data/imgs/flags/ky.png diff --git a/data/imgs/flags/KZ.png b/data/imgs/flags/kz.png similarity index 100% rename from data/imgs/flags/KZ.png rename to data/imgs/flags/kz.png diff --git a/data/imgs/flags/LA.png b/data/imgs/flags/la.png similarity index 100% rename from data/imgs/flags/LA.png rename to data/imgs/flags/la.png diff --git a/data/imgs/flags/LB.png b/data/imgs/flags/lb.png similarity index 100% rename from data/imgs/flags/LB.png rename to data/imgs/flags/lb.png diff --git a/data/imgs/flags/LC.png b/data/imgs/flags/lc.png similarity index 100% rename from data/imgs/flags/LC.png rename to data/imgs/flags/lc.png diff --git a/data/imgs/flags/LI.png b/data/imgs/flags/li.png similarity index 100% rename from data/imgs/flags/LI.png rename to data/imgs/flags/li.png diff --git a/data/imgs/flags/LK.png b/data/imgs/flags/lk.png similarity index 100% rename from data/imgs/flags/LK.png rename to data/imgs/flags/lk.png diff --git a/data/imgs/flags/LR.png b/data/imgs/flags/lr.png similarity index 100% rename from data/imgs/flags/LR.png rename to data/imgs/flags/lr.png diff --git a/data/imgs/flags/LS.png b/data/imgs/flags/ls.png similarity index 100% rename from data/imgs/flags/LS.png rename to data/imgs/flags/ls.png diff --git a/data/imgs/flags/LT.png b/data/imgs/flags/lt.png similarity index 100% rename from data/imgs/flags/LT.png rename to data/imgs/flags/lt.png diff --git a/data/imgs/flags/LU.png b/data/imgs/flags/lu.png similarity index 100% rename from data/imgs/flags/LU.png rename to data/imgs/flags/lu.png diff --git a/data/imgs/flags/LV.png b/data/imgs/flags/lv.png similarity index 100% rename from data/imgs/flags/LV.png rename to data/imgs/flags/lv.png diff --git a/data/imgs/flags/LY.png b/data/imgs/flags/ly.png similarity index 100% rename from data/imgs/flags/LY.png rename to data/imgs/flags/ly.png diff --git a/data/imgs/flags/MA.png b/data/imgs/flags/ma.png similarity index 100% rename from data/imgs/flags/MA.png rename to data/imgs/flags/ma.png diff --git a/data/imgs/flags/MC.png b/data/imgs/flags/mc.png similarity index 100% rename from data/imgs/flags/MC.png rename to data/imgs/flags/mc.png diff --git a/data/imgs/flags/MD.png b/data/imgs/flags/md.png similarity index 100% rename from data/imgs/flags/MD.png rename to data/imgs/flags/md.png diff --git a/data/imgs/flags/ME.png b/data/imgs/flags/me.png similarity index 100% rename from data/imgs/flags/ME.png rename to data/imgs/flags/me.png diff --git a/data/imgs/flags/MF.png b/data/imgs/flags/mf.png similarity index 100% rename from data/imgs/flags/MF.png rename to data/imgs/flags/mf.png diff --git a/data/imgs/flags/MG.png b/data/imgs/flags/mg.png similarity index 100% rename from data/imgs/flags/MG.png rename to data/imgs/flags/mg.png diff --git a/data/imgs/flags/MH.png b/data/imgs/flags/mh.png similarity index 100% rename from data/imgs/flags/MH.png rename to data/imgs/flags/mh.png diff --git a/data/imgs/flags/MK.png b/data/imgs/flags/mk.png similarity index 100% rename from data/imgs/flags/MK.png rename to data/imgs/flags/mk.png diff --git a/data/imgs/flags/ML.png b/data/imgs/flags/ml.png similarity index 100% rename from data/imgs/flags/ML.png rename to data/imgs/flags/ml.png diff --git a/data/imgs/flags/MM.png b/data/imgs/flags/mm.png similarity index 100% rename from data/imgs/flags/MM.png rename to data/imgs/flags/mm.png diff --git a/data/imgs/flags/MN.png b/data/imgs/flags/mn.png similarity index 100% rename from data/imgs/flags/MN.png rename to data/imgs/flags/mn.png diff --git a/data/imgs/flags/MO.png b/data/imgs/flags/mo.png similarity index 100% rename from data/imgs/flags/MO.png rename to data/imgs/flags/mo.png diff --git a/data/imgs/flags/MP.png b/data/imgs/flags/mp.png similarity index 100% rename from data/imgs/flags/MP.png rename to data/imgs/flags/mp.png diff --git a/data/imgs/flags/MQ.png b/data/imgs/flags/mq.png similarity index 100% rename from data/imgs/flags/MQ.png rename to data/imgs/flags/mq.png diff --git a/data/imgs/flags/MR.png b/data/imgs/flags/mr.png similarity index 100% rename from data/imgs/flags/MR.png rename to data/imgs/flags/mr.png diff --git a/data/imgs/flags/MS.png b/data/imgs/flags/ms.png similarity index 100% rename from data/imgs/flags/MS.png rename to data/imgs/flags/ms.png diff --git a/data/imgs/flags/MT.png b/data/imgs/flags/mt.png similarity index 100% rename from data/imgs/flags/MT.png rename to data/imgs/flags/mt.png diff --git a/data/imgs/flags/MU.png b/data/imgs/flags/mu.png similarity index 100% rename from data/imgs/flags/MU.png rename to data/imgs/flags/mu.png diff --git a/data/imgs/flags/MV.png b/data/imgs/flags/mv.png similarity index 100% rename from data/imgs/flags/MV.png rename to data/imgs/flags/mv.png diff --git a/data/imgs/flags/MW.png b/data/imgs/flags/mw.png similarity index 100% rename from data/imgs/flags/MW.png rename to data/imgs/flags/mw.png diff --git a/data/imgs/flags/MX.png b/data/imgs/flags/mx.png similarity index 100% rename from data/imgs/flags/MX.png rename to data/imgs/flags/mx.png diff --git a/data/imgs/flags/MY.png b/data/imgs/flags/my.png similarity index 100% rename from data/imgs/flags/MY.png rename to data/imgs/flags/my.png diff --git a/data/imgs/flags/MZ.png b/data/imgs/flags/mz.png similarity index 100% rename from data/imgs/flags/MZ.png rename to data/imgs/flags/mz.png diff --git a/data/imgs/flags/NA.png b/data/imgs/flags/na.png similarity index 100% rename from data/imgs/flags/NA.png rename to data/imgs/flags/na.png diff --git a/data/imgs/flags/NC.png b/data/imgs/flags/nc.png similarity index 100% rename from data/imgs/flags/NC.png rename to data/imgs/flags/nc.png diff --git a/data/imgs/flags/NE.png b/data/imgs/flags/ne.png similarity index 100% rename from data/imgs/flags/NE.png rename to data/imgs/flags/ne.png diff --git a/data/imgs/flags/NF.png b/data/imgs/flags/nf.png similarity index 100% rename from data/imgs/flags/NF.png rename to data/imgs/flags/nf.png diff --git a/data/imgs/flags/NG.png b/data/imgs/flags/ng.png similarity index 100% rename from data/imgs/flags/NG.png rename to data/imgs/flags/ng.png diff --git a/data/imgs/flags/NI.png b/data/imgs/flags/ni.png similarity index 100% rename from data/imgs/flags/NI.png rename to data/imgs/flags/ni.png diff --git a/data/imgs/flags/NL.png b/data/imgs/flags/nl.png similarity index 100% rename from data/imgs/flags/NL.png rename to data/imgs/flags/nl.png diff --git a/data/imgs/flags/NO.png b/data/imgs/flags/no.png similarity index 100% rename from data/imgs/flags/NO.png rename to data/imgs/flags/no.png diff --git a/data/imgs/flags/NP.png b/data/imgs/flags/np.png similarity index 100% rename from data/imgs/flags/NP.png rename to data/imgs/flags/np.png diff --git a/data/imgs/flags/NR.png b/data/imgs/flags/nr.png similarity index 100% rename from data/imgs/flags/NR.png rename to data/imgs/flags/nr.png diff --git a/data/imgs/flags/NU.png b/data/imgs/flags/nu.png similarity index 100% rename from data/imgs/flags/NU.png rename to data/imgs/flags/nu.png diff --git a/data/imgs/flags/NZ.png b/data/imgs/flags/nz.png similarity index 100% rename from data/imgs/flags/NZ.png rename to data/imgs/flags/nz.png diff --git a/data/imgs/flags/OM.png b/data/imgs/flags/om.png similarity index 100% rename from data/imgs/flags/OM.png rename to data/imgs/flags/om.png diff --git a/data/imgs/flags/PA.png b/data/imgs/flags/pa.png similarity index 100% rename from data/imgs/flags/PA.png rename to data/imgs/flags/pa.png diff --git a/data/imgs/flags/PE.png b/data/imgs/flags/pe.png similarity index 100% rename from data/imgs/flags/PE.png rename to data/imgs/flags/pe.png diff --git a/data/imgs/flags/PF.png b/data/imgs/flags/pf.png similarity index 100% rename from data/imgs/flags/PF.png rename to data/imgs/flags/pf.png diff --git a/data/imgs/flags/PG.png b/data/imgs/flags/pg.png similarity index 100% rename from data/imgs/flags/PG.png rename to data/imgs/flags/pg.png diff --git a/data/imgs/flags/PH.png b/data/imgs/flags/ph.png similarity index 100% rename from data/imgs/flags/PH.png rename to data/imgs/flags/ph.png diff --git a/data/imgs/flags/PK.png b/data/imgs/flags/pk.png similarity index 100% rename from data/imgs/flags/PK.png rename to data/imgs/flags/pk.png diff --git a/data/imgs/flags/PL.png b/data/imgs/flags/pl.png similarity index 100% rename from data/imgs/flags/PL.png rename to data/imgs/flags/pl.png diff --git a/data/imgs/flags/PN.png b/data/imgs/flags/pn.png similarity index 100% rename from data/imgs/flags/PN.png rename to data/imgs/flags/pn.png diff --git a/data/imgs/flags/PR.png b/data/imgs/flags/pr.png similarity index 100% rename from data/imgs/flags/PR.png rename to data/imgs/flags/pr.png diff --git a/data/imgs/flags/PS.png b/data/imgs/flags/ps.png similarity index 100% rename from data/imgs/flags/PS.png rename to data/imgs/flags/ps.png diff --git a/data/imgs/flags/PT.png b/data/imgs/flags/pt.png similarity index 100% rename from data/imgs/flags/PT.png rename to data/imgs/flags/pt.png diff --git a/data/imgs/flags/PW.png b/data/imgs/flags/pw.png similarity index 100% rename from data/imgs/flags/PW.png rename to data/imgs/flags/pw.png diff --git a/data/imgs/flags/PY.png b/data/imgs/flags/py.png similarity index 100% rename from data/imgs/flags/PY.png rename to data/imgs/flags/py.png diff --git a/data/imgs/flags/QA.png b/data/imgs/flags/qa.png similarity index 100% rename from data/imgs/flags/QA.png rename to data/imgs/flags/qa.png diff --git a/data/imgs/flags/RE.png b/data/imgs/flags/re.png similarity index 100% rename from data/imgs/flags/RE.png rename to data/imgs/flags/re.png diff --git a/data/imgs/flags/RO.png b/data/imgs/flags/ro.png similarity index 100% rename from data/imgs/flags/RO.png rename to data/imgs/flags/ro.png diff --git a/data/imgs/flags/RS.png b/data/imgs/flags/rs.png similarity index 100% rename from data/imgs/flags/RS.png rename to data/imgs/flags/rs.png diff --git a/data/imgs/flags/RU.png b/data/imgs/flags/ru.png similarity index 100% rename from data/imgs/flags/RU.png rename to data/imgs/flags/ru.png diff --git a/data/imgs/flags/RW.png b/data/imgs/flags/rw.png similarity index 100% rename from data/imgs/flags/RW.png rename to data/imgs/flags/rw.png diff --git a/data/imgs/flags/SA.png b/data/imgs/flags/sa.png similarity index 100% rename from data/imgs/flags/SA.png rename to data/imgs/flags/sa.png diff --git a/data/imgs/flags/SB.png b/data/imgs/flags/sb.png similarity index 100% rename from data/imgs/flags/SB.png rename to data/imgs/flags/sb.png diff --git a/data/imgs/flags/SC.png b/data/imgs/flags/sc.png similarity index 100% rename from data/imgs/flags/SC.png rename to data/imgs/flags/sc.png diff --git a/data/imgs/flags/SD.png b/data/imgs/flags/sd.png similarity index 100% rename from data/imgs/flags/SD.png rename to data/imgs/flags/sd.png diff --git a/data/imgs/flags/SE.png b/data/imgs/flags/se.png similarity index 100% rename from data/imgs/flags/SE.png rename to data/imgs/flags/se.png diff --git a/data/imgs/flags/SG.png b/data/imgs/flags/sg.png similarity index 100% rename from data/imgs/flags/SG.png rename to data/imgs/flags/sg.png diff --git a/data/imgs/flags/SH.png b/data/imgs/flags/sh.png similarity index 100% rename from data/imgs/flags/SH.png rename to data/imgs/flags/sh.png diff --git a/data/imgs/flags/SI.png b/data/imgs/flags/si.png similarity index 100% rename from data/imgs/flags/SI.png rename to data/imgs/flags/si.png diff --git a/data/imgs/flags/SK.png b/data/imgs/flags/sk.png similarity index 100% rename from data/imgs/flags/SK.png rename to data/imgs/flags/sk.png diff --git a/data/imgs/flags/SL.png b/data/imgs/flags/sl.png similarity index 100% rename from data/imgs/flags/SL.png rename to data/imgs/flags/sl.png diff --git a/data/imgs/flags/SM.png b/data/imgs/flags/sm.png similarity index 100% rename from data/imgs/flags/SM.png rename to data/imgs/flags/sm.png diff --git a/data/imgs/flags/SN.png b/data/imgs/flags/sn.png similarity index 100% rename from data/imgs/flags/SN.png rename to data/imgs/flags/sn.png diff --git a/data/imgs/flags/SO.png b/data/imgs/flags/so.png similarity index 100% rename from data/imgs/flags/SO.png rename to data/imgs/flags/so.png diff --git a/data/imgs/flags/SR.png b/data/imgs/flags/sr.png similarity index 100% rename from data/imgs/flags/SR.png rename to data/imgs/flags/sr.png diff --git a/data/imgs/flags/SS.png b/data/imgs/flags/ss.png similarity index 100% rename from data/imgs/flags/SS.png rename to data/imgs/flags/ss.png diff --git a/data/imgs/flags/ST.png b/data/imgs/flags/st.png similarity index 100% rename from data/imgs/flags/ST.png rename to data/imgs/flags/st.png diff --git a/data/imgs/flags/SV.png b/data/imgs/flags/sv.png similarity index 100% rename from data/imgs/flags/SV.png rename to data/imgs/flags/sv.png diff --git a/data/imgs/flags/SX.png b/data/imgs/flags/sx.png similarity index 100% rename from data/imgs/flags/SX.png rename to data/imgs/flags/sx.png diff --git a/data/imgs/flags/SY.png b/data/imgs/flags/sy.png similarity index 100% rename from data/imgs/flags/SY.png rename to data/imgs/flags/sy.png diff --git a/data/imgs/flags/SZ.png b/data/imgs/flags/sz.png similarity index 100% rename from data/imgs/flags/SZ.png rename to data/imgs/flags/sz.png diff --git a/data/imgs/flags/TC.png b/data/imgs/flags/tc.png similarity index 100% rename from data/imgs/flags/TC.png rename to data/imgs/flags/tc.png diff --git a/data/imgs/flags/TD.png b/data/imgs/flags/td.png similarity index 100% rename from data/imgs/flags/TD.png rename to data/imgs/flags/td.png diff --git a/data/imgs/flags/TF.png b/data/imgs/flags/tf.png similarity index 100% rename from data/imgs/flags/TF.png rename to data/imgs/flags/tf.png diff --git a/data/imgs/flags/TG.png b/data/imgs/flags/tg.png similarity index 100% rename from data/imgs/flags/TG.png rename to data/imgs/flags/tg.png diff --git a/data/imgs/flags/TH.png b/data/imgs/flags/th.png similarity index 100% rename from data/imgs/flags/TH.png rename to data/imgs/flags/th.png diff --git a/data/imgs/flags/TJ.png b/data/imgs/flags/tj.png similarity index 100% rename from data/imgs/flags/TJ.png rename to data/imgs/flags/tj.png diff --git a/data/imgs/flags/TK.png b/data/imgs/flags/tk.png similarity index 100% rename from data/imgs/flags/TK.png rename to data/imgs/flags/tk.png diff --git a/data/imgs/flags/TL.png b/data/imgs/flags/tl.png similarity index 100% rename from data/imgs/flags/TL.png rename to data/imgs/flags/tl.png diff --git a/data/imgs/flags/TM.png b/data/imgs/flags/tm.png similarity index 100% rename from data/imgs/flags/TM.png rename to data/imgs/flags/tm.png diff --git a/data/imgs/flags/TN.png b/data/imgs/flags/tn.png similarity index 100% rename from data/imgs/flags/TN.png rename to data/imgs/flags/tn.png diff --git a/data/imgs/flags/TO.png b/data/imgs/flags/to.png similarity index 100% rename from data/imgs/flags/TO.png rename to data/imgs/flags/to.png diff --git a/data/imgs/flags/TR.png b/data/imgs/flags/tr.png similarity index 100% rename from data/imgs/flags/TR.png rename to data/imgs/flags/tr.png diff --git a/data/imgs/flags/TT.png b/data/imgs/flags/tt.png similarity index 100% rename from data/imgs/flags/TT.png rename to data/imgs/flags/tt.png diff --git a/data/imgs/flags/TV.png b/data/imgs/flags/tv.png similarity index 100% rename from data/imgs/flags/TV.png rename to data/imgs/flags/tv.png diff --git a/data/imgs/flags/TW.png b/data/imgs/flags/tw.png similarity index 100% rename from data/imgs/flags/TW.png rename to data/imgs/flags/tw.png diff --git a/data/imgs/flags/TZ.png b/data/imgs/flags/tz.png similarity index 100% rename from data/imgs/flags/TZ.png rename to data/imgs/flags/tz.png diff --git a/data/imgs/flags/UA.png b/data/imgs/flags/ua.png similarity index 100% rename from data/imgs/flags/UA.png rename to data/imgs/flags/ua.png diff --git a/data/imgs/flags/UG.png b/data/imgs/flags/ug.png similarity index 100% rename from data/imgs/flags/UG.png rename to data/imgs/flags/ug.png diff --git a/data/imgs/flags/_unknown.png b/data/imgs/flags/unknown.png similarity index 100% rename from data/imgs/flags/_unknown.png rename to data/imgs/flags/unknown.png diff --git a/data/imgs/flags/US.png b/data/imgs/flags/us.png similarity index 100% rename from data/imgs/flags/US.png rename to data/imgs/flags/us.png diff --git a/data/imgs/flags/UY.png b/data/imgs/flags/uy.png similarity index 100% rename from data/imgs/flags/UY.png rename to data/imgs/flags/uy.png diff --git a/data/imgs/flags/UZ.png b/data/imgs/flags/uz.png similarity index 100% rename from data/imgs/flags/UZ.png rename to data/imgs/flags/uz.png diff --git a/data/imgs/flags/VA.png b/data/imgs/flags/va.png similarity index 100% rename from data/imgs/flags/VA.png rename to data/imgs/flags/va.png diff --git a/data/imgs/flags/VC.png b/data/imgs/flags/vc.png similarity index 100% rename from data/imgs/flags/VC.png rename to data/imgs/flags/vc.png diff --git a/data/imgs/flags/VE.png b/data/imgs/flags/ve.png similarity index 100% rename from data/imgs/flags/VE.png rename to data/imgs/flags/ve.png diff --git a/data/imgs/flags/VG.png b/data/imgs/flags/vg.png similarity index 100% rename from data/imgs/flags/VG.png rename to data/imgs/flags/vg.png diff --git a/data/imgs/flags/VI.png b/data/imgs/flags/vi.png similarity index 100% rename from data/imgs/flags/VI.png rename to data/imgs/flags/vi.png diff --git a/data/imgs/flags/VN.png b/data/imgs/flags/vn.png similarity index 100% rename from data/imgs/flags/VN.png rename to data/imgs/flags/vn.png diff --git a/data/imgs/flags/VU.png b/data/imgs/flags/vu.png similarity index 100% rename from data/imgs/flags/VU.png rename to data/imgs/flags/vu.png diff --git a/data/imgs/flags/WF.png b/data/imgs/flags/wf.png similarity index 100% rename from data/imgs/flags/WF.png rename to data/imgs/flags/wf.png diff --git a/data/imgs/flags/WS.png b/data/imgs/flags/ws.png similarity index 100% rename from data/imgs/flags/WS.png rename to data/imgs/flags/ws.png diff --git a/data/imgs/flags/YE.png b/data/imgs/flags/ye.png similarity index 100% rename from data/imgs/flags/YE.png rename to data/imgs/flags/ye.png diff --git a/data/imgs/flags/YT.png b/data/imgs/flags/yt.png similarity index 100% rename from data/imgs/flags/YT.png rename to data/imgs/flags/yt.png diff --git a/data/imgs/flags/ZA.png b/data/imgs/flags/za.png similarity index 100% rename from data/imgs/flags/ZA.png rename to data/imgs/flags/za.png diff --git a/data/imgs/flags/ZM.png b/data/imgs/flags/zm.png similarity index 100% rename from data/imgs/flags/ZM.png rename to data/imgs/flags/zm.png diff --git a/data/imgs/flags/ZW.png b/data/imgs/flags/zw.png similarity index 100% rename from data/imgs/flags/ZW.png rename to data/imgs/flags/zw.png diff --git a/data/imgs/skill_icons/placeholder.svg b/data/imgs/skill_icons/unknown.svg similarity index 100% rename from data/imgs/skill_icons/placeholder.svg rename to data/imgs/skill_icons/unknown.svg diff --git a/data/seed_data/iso_639_1.csv b/data/seed_data/iso_639_1.csv new file mode 100644 index 0000000..7db7c3a --- /dev/null +++ b/data/seed_data/iso_639_1.csv @@ -0,0 +1,186 @@ +Sprache,Sprachfamilie,ISO-Sprach­bezeichnung,Endonym,639-1,639-2/T,639-2/B,639-3,Anmerkungen +Abchasisch,Nordwestkaukasisch,Abkhazian,"аҧсуа бызшәа, аҧсшәа",ab,abk,abk,abk,auch bekannt als Abkhaz +Afar,Afroasiatisch,Afar,Afaraf,aa,aar,aar,aar, +Afrikaans,Indoeuropäisch,Afrikaans,Afrikaans,af,afr,afr,afr, +Akan,Niger-Kongo,Akan,Akan,ak,aka,aka,aka + 2,"Makrosprache: [tw/twi] Twi, [fat] Fante" +Albanisch,Indoeuropäisch,Albanian,Shqip,sq,sqi,alb,sqi + 4,"Albanische Phylozone nach ISO 639-6, Makrosprache: [aae] Arbëresh, [aat] Arvanitika, [aln] Gegisch, [als] Toskisch" +Amharisch,Afroasiatisch,Amharic,አማርኛ,am,amh,amh,amh, +Arabisch,Afroasiatisch,Arabic,العربية,ar,ara,ara,ara + 30,"Makrosprache: [aao] Algerian Saharan Arabic, [abh] Tajiki Arabic, [abv] Baharna Arabic, [acm] Mesopotamian Arabic, [acq] Ta'izzi-Adeni Arabic, [acw] Hijazi Arabic, [acx] Omani Arabic, [acy] Cypriot Arabic, [adf] Dhofari Arabic, [aeb] Tunisian Arabic, [aec] Saidi Arabic, [afb] Gulf Arabic, [ajp] South Levantine Arabic, [apc] North Levantine Arabic, [apd] Sudanese Arabic, [arb] Standard Arabic, [arq] Algerian Arabic, [ars] Najdi Arabic, [ary] Moroccan Arabic, [arz] Egyptian Arabic, [auz] Uzbeki Arabic, [avl] Eastern Egyptian Bedawi Arabic, [ayh] Hadrami Arabic, [ayl] Libyan Arabic, [ayn] Sanaani Arabic, [ayp] North Mesopotamian Arabic, [bbz] Babalia Creole Arabic, [pga] Sudanese Creole Arabic, [shu] Chadian Arabic, [ssh] Shihhi Arabic" +Aragonesisch,Indoeuropäisch,Aragonese,aragonés,an,arg,arg,arg, +Armenisch,Indoeuropäisch,Armenian,Հայերեն,hy,hye,arm,hye,"auch bekannt als Հայերէն; ISO 639-3 code [hye] ist für Ostarmenisch, [hyw] Westarmenisch, [xcl] Altarmenisch" +Assamesisch,Indoeuropäisch,Assamese,অসমীয়া,as,asm,asm,asm, +Avarisch,Nordostkaukasisch,Avaric,"авар мацӀ, магӀарул мацӀ",av,ava,ava,ava,auch bekannt als Avar +Avestisch,Indoeuropäisch,Avestan,avesta,ae,ave,ave,ave,Alte Sprache: Kultsprache der Priester des Zoroastrismus +Aymara,Aymara,Aymara,aymar aru,ay,aym,aym,aym + 2,"Makrosprache: [ayr] Central Aymara, [ayc] Southern Aymara" +Aserbaidschanisch,Turk,Azerbaijani,azərbaycan dili,az,aze,aze,aze + 2,"Makrosprache: [azj] North Azerbaijani, [azb] South Azerbaijani" +Bambara,Niger-Kongo,Bambara,bamanankan,bm,bam,bam,bam, +Baschkirisch,Turk,Bashkir,башҡорт теле,ba,bak,bak,bak, +Baskisch,Isoliert,Basque,"euskara, euskera",eu,eus,baq,eus, +Weißrussisch,Indoeuropäisch,Belarusian,беларуская мова,be,bel,bel,bel, +Bengalisch,Indoeuropäisch,Bengali,বাংলা,bn,ben,ben,ben,auch bekannt als Bangla +Bihari,Indoeuropäisch,Bihari languages,भोजपुरी,bh,bih,bih,,"Sammelsprachcode für [bho] Bhojpuri, [mag] Magahi, [mai] Maithili und weitere" +Bislama,Kreol,Bislama,Bislama,bi,bis,bis,bis,Sprache entstand aus dem Englischen und den Sprachen der Ni-Vanuatu mit einigen französischen Einflüssen +Bosnisch,Indoeuropäisch,Bosnian,bosanski jezik,bs,bos,bos,bos, +Bretonisch,Indoeuropäisch,Breton,brezhoneg,br,bre,bre,bre, +Bulgarisch,Indoeuropäisch,Bulgarian,български език,bg,bul,bul,bul, +Birmanisch,Sinotibetisch,Burmese,ဗမာစာ,my,mya,bur,mya, +"Katalanisch, Valencianisch",Indoeuropäisch,"Catalan, Valencian","català, valencià",ca,cat,cat,cat, +Chamorro,Austronesisch,Chamorro,Chamoru,ch,cha,cha,cha, +Tschetschenisch,Nordostkaukasisch,Chechen,нохчийн мотт,ce,che,che,che, +Chichewa,Niger-Kongo,"Chichewa, Chewa, Nyanja","chiCheŵa, chinyanja",ny,nya,nya,nya, +Chinesisch,Sinotibetisch,Chinese,".mw-parser-output .Hani{font-size:110%}中文 (Zhōngwén),.mw-parser-output .Hans{font-size:110%}汉语, .mw-parser-output .Hant{font-size:110%}漢語",zh,zho,chi,zho + 14,"Makrosprache: [cdo] Min Dong Chinese, [cjy] Jinyu Chinese, [cmn] Mandarin Chinese, [cpx] Pu-Xian Chinese, [czh] Huizhou Chinese, [czo] Min Zhong Chinese, [gan] Gan Chinese, [hak] Hakka Chinese, [hsn] Xiang Chinese, [lzh] Literary Chinese, [mnp] Min Bei Chinese, [nan] Min Nan Chinese, [wuu] Wu Chinese, [yue] Yue Chinese. Alte Sprache: [och] Altchinesisch. Klassische Sprache: [ltc] Mittelchinesisch" +Tschuwaschisch,Turk,Chuvash,чӑваш чӗлхи,cv,chv,chv,chv, +Kornisch,Indoeuropäisch,Cornish,Kernewek,kw,cor,cor,cor, +Korsisch,Indoeuropäisch,Corsican,"corsu, lingua corsa",co,cos,cos,cos, +Cree,Algonkin,Cree,ᓀᐦᐃᔭᐍᐏᐣ,cr,cre,cre,cre + 6,"Makrosprache: [crm] Moose Cree, [crl] Northern East Cree, [crk] Plains Cree, [crj] Southern East Cree, [csw] Swampy Cree, [cwd] Woods Cree" +Kroatisch,Indoeuropäisch,Croatian,hrvatski jezik,hr,hrv,hrv,hrv, +Tschechisch,Indoeuropäisch,Czech,"čeština, český jazyk",cs,ces,cze,ces, +Dänisch,Indoeuropäisch,Danish,dansk,da,dan,dan,dan, +Dhivehi,Indoeuropäisch,"Divehi, Dhivehi, Maldivian",ދިވެހި,dv,div,div,div, +"Niederländisch, Belgisches Niederländisch",Indoeuropäisch,"Dutch, Flemish","Nederlands, Vlaams",nl,nld,dut,nld, +Dzongkha,Sinotibetisch,Dzongkha,རྫོང་ཁ,dz,dzo,dzo,dzo, +Englisch,Indoeuropäisch,English,English,en,eng,eng,eng, +Esperanto,Plansprache,Esperanto,Esperanto,eo,epo,epo,epo,"Plansprache, begonnen 1887 von Ludwik Lejzer Zamenhof" +Estnisch,Uralisch,Estonian,"eesti, eesti keel",et,est,est,est + 2,"Makrosprache: [ekk] Standard Estonian, [vro] Võro" +Ewe,Niger-Kongo,Ewe,Eʋegbe,ee,ewe,ewe,ewe, +Färöisch,Indoeuropäisch,Faroese,føroyskt,fo,fao,fao,fao, +Fidschi,Austronesisch,Fijian,vosa Vakaviti,fj,fij,fij,fij, +Finnisch,Uralisch,Finnish,"suomi, suomen kieli",fi,fin,fin,fin, +Französisch,Indoeuropäisch,French,"français, langue française",fr,fra,fre,fra, +Fulfulde,Niger-Kongo,Fulah,"Fulfulde, Pulaar, Pular",ff,ful,ful,ful + 9,"Auch bekannt als Fula. Makrosprache: [fub] Adamawa Fulfulde, [fui] Bagirmi Fulfulde, [fue] Borgu Fulfulde, [fuq] Central-Eastern Niger Fulfulde, [ffm] Maasina Fulfulde, [fuv] Nigerian Fulfulde, [fuc] Pulaar, [fuf] Pular, [fuh] Western Niger Fulfulde" +"Galicisch, Galegisch",Indoeuropäisch,Galician,Galego,gl,glg,glg,glg, +Georgisch,Südkaukasisch,Georgian,ქართული,ka,kat,geo,kat, +Deutsch,Indoeuropäisch,German,Deutsch,de,deu,ger,deu, +Griechisch,Indoeuropäisch,"Greek, Modern (1453–)",ελληνικά,el,ell,gre,ell, +Guaraní,Tupí,Guarani,Avañe'ẽ,gn,grn,grn,grn + 5,"Makrosprache: [nhd] Chiripá, [gui] Eastern Bolivian Guaraní, [gun] Mbyá Guaraní, [gug] Paraguayan Guaraní, [gnw] Western Bolivian Guaraní" +Gujarati,Indoeuropäisch,Gujarati,ગુજરાતી,gu,guj,guj,guj, +Haitianisch,Kreol,"Haitian, Haitian Kreol",Kreyòl ayisyen,ht,hat,hat,hat, +Hausa,Afroasiatisch,Hausa,هَوُسَ,ha,hau,hau,hau, +Hebräisch,Afroasiatisch,Hebrew,עברית,he,heb,heb,heb,Modernes Hebräisch. Geändert 1989 von ursprünglich ISO 639:1988 [iw] +Otjiherero,Niger-Kongo,Herero,Otjiherero,hz,her,her,her, +Hindi,Indoeuropäisch,Hindi,"हिन्दी, हिंदी",hi,hin,hin,hin, +Hiri Motu,Austronesisch,Hiri Motu,Hiri Motu,ho,hmo,hmo,hmo, +Ungarisch,Uralisch,Hungarian,magyar,hu,hun,hun,hun, +Interlingua,Plansprache,Interlingua (International Auxiliary Language Association),Interlingua,ia,ina,ina,ina,Plansprache von der International Auxiliary Language Association +Indonesisch,Austronesisch,Indonesian,Bahasa Indonesia,id,ind,ind,ind,Abgedeckt durch Makrosprache [ms/msa] Malaiisch. Geändert 1989 von ursprünglich ISO 639:1988 [in] +Interlingue,Plansprache,"Interlingue, Occidental","(ursprünglich:) Occidental, (nach 1945:) Interlingue",ie,ile,ile,ile,Plansprache von Edgar von Wahl +Irisch,Indoeuropäisch,Irish,Gaeilge,ga,gle,gle,gle, +Igbo,Niger-Kongo,Igbo,Asụsụ Igbo,ig,ibo,ibo,ibo, +Inupiaq,Eskimo-aleutisch,Inupiaq,"Iñupiaq, Iñupiatun",ik,ipk,ipk,ipk + 2,"Makrosprache: [esi] North Alaskan Inupiatun, [esk] Northwest Alaska Inupiatun" +Ido,Plansprache,Ido,Ido,io,ido,ido,ido,"Plansprache von Couturat und de Beaufront, 1907, als Variation von Esperanto" +Isländisch,Indoeuropäisch,Icelandic,Íslenska,is,isl,ice,isl, +Italienisch,Indoeuropäisch,Italian,Italiano,it,ita,ita,ita, +Inuktitut,Eskimo-aleutisch,Inuktitut,ᐃᓄᒃᑎᑐᑦ,iu,iku,iku,iku + 2,"Makrosprache: [ike] Eastern Canadian Inuktitut, [ikt] Inuinnaqtun" +Japanisch,Japanisch-Ryūkyū,Japanese,"日本語,(.mw-parser-output .Hira{font-size:120%}にほんご)",ja,jpn,jpn,jpn, +Javanisch,Austronesisch,Javanese,"ꦧꦱꦗꦮ, Basa Jawa",jv,jav,jav,jav, +"Grönländisch, Kalaallisut",Eskimo-aleutisch,"Kalaallisut, Greenlandic","kalaallisut, kalaallit oqaasii",kl,kal,kal,kal, +Kannada,Dravidisch,Kannada,ಕನ್ನಡ,kn,kan,kan,kan, +Kanuri,Nilosaharanisch,Kanuri,Kanuri,kr,kau,kau,kau + 3,"Makrosprache: [knc] Central Kanuri, [kby] Manga Kanuri, [krt] Tumari Kanuri" +Kashmiri,Indoeuropäisch,Kashmiri,".mw-parser-output .Deva{font-size:120%}@media all and (min-width:800px){.mw-parser-output .Deva{font-size:calc(120% - ((100vw - 800px)/80))}}@media all and (min-width:1000px){.mw-parser-output .Deva{font-size:100%}}कश्मीरी,.mw-parser-output .Arab a,.mw-parser-output a bdi.Arab{text-decoration:none!important}.mw-parser-output .Arab{font-size:120%}كشميري",ks,kas,kas,kas, +Kasachisch,Turk,Kazakh,қазақ тілі,kk,kaz,kaz,kaz, +Khmer,Austroasiatisch,Central Khmer,"ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ",km,khm,khm,khm,auch bekannt als Khmer oder Cambodian +Kikuyu,Niger-Kongo,"Kikuyu, Gikuyu",Gĩkũyũ,ki,kik,kik,kik, +"Kinyarwanda, Ruandisch",Niger-Kongo,Kinyarwanda,Ikinyarwanda,rw,kin,kin,kin, +Kirgisisch,Turk,"Kirghiz, Kyrgyz","Кыргызча, Кыргыз тили",ky,kir,kir,kir, +Komi,Uralisch,Komi,коми кыв,kv,kom,kom,kom + 2,"Makrosprache: [koi] Komi-Permyak, [kpv] Komi-Zyrian" +Kikongo,Niger-Kongo,Kongo,Kikongo,kg,kon,kon,kon + 3,"Makrosprache: [kng] Koongo, [ldi] Laari, [kwy] San Salvador Kongo" +Koreanisch,Koreanisch,Korean,한국어,ko,kor,kor,kor, +Kurdisch,Indoeuropäisch,Kurdish,"Kurdî,کوردی",ku,kur,kur,kur + 3,"Makrosprache: [ckb] Sorani, [kmr] Kurmandschi, [sdh] Südkurdisch" +oshiKwanyama,Niger-Kongo,"Kuanyama, Kwanyama",Kuanyama,kj,kua,kua,kua,Dialektzweig von Oshivambo +Latein,Indoeuropäisch,Latin,"latine, lingua latina",la,lat,lat,lat,Alte Sprache +Luxemburgisch,Indoeuropäisch,"Luxembourgish, Letzeburgesch",Lëtzebuergesch,lb,ltz,ltz,ltz, +Luganda,Niger-Kongo,Ganda,Luganda,lg,lug,lug,lug, +"Limburgisch, Südniederfränkisch",Indoeuropäisch,"Limburgan, Limburger, Limburgish",Limburgs,li,lim,lim,lim, +Lingála,Niger-Kongo,Lingala,Lingála,ln,lin,lin,lin, +Laotisch,Tai-Kadai,Lao,ພາສາລາວ,lo,lao,lao,lao, +Litauisch,Indoeuropäisch,Lithuanian,lietuvių kalba,lt,lit,lit,lit, +Kiluba,Niger-Kongo,Luba-Katanga,Kiluba,lu,lub,lub,lub,auch bekannt als Luba-Shaba +Lettisch,Indoeuropäisch,Latvian,latviešu valoda,lv,lav,lav,lav + 2,"Makrosprache: [ltg] Latgalian, [lvs] Standard Latvian" +"Manx,Manx-Gälisch",Indoeuropäisch,Manx,"Gaelg, Gailck",gv,glv,glv,glv, +Mazedonisch,Indoeuropäisch,Macedonian,македонски јазик,mk,mkd,mac,mkd, +"Malagasy, Malagassi",Austronesisch,Malagasy,fiteny malagasy,mg,mlg,mlg,mlg + 11,"Makrosprache: [xmv] Antankarana Malagasy, [bhr] Bara Malagasy, [msh] Masikoro Malagasy, [bmm] Northern Betsimisaraka Malagasy, [plt] Plateau Malagasy, [skg] Sakalava Malagasy, [bzc] Southern Betsimisaraka Malagasy, [tkg] Tesaka Malagasy, [tdx] Tandroy-Mahafaly Malagasy, [txy] Tanosy Malagasy, [xmw] Tsimihety Malagasy" +Malaiisch,Austronesisch,Malay,"Bahasa Melayu,بهاس ملايو",ms,msa,may,msa + 36,"[zsm] Malaysisch, [id/ind] Indonesisch. Makrosprache: [btj] Bacanese Malay, [mfb] Bangka, [bjn] Banjar, [bve] Berau Malay, [kxd] Brunei, [bvu] Bukit Malay, [pse] Central Malay, [coa] Cocos Islands Malay, [liw] Col, [dup] Duano, [hji] Haji, [jak] Jakun, [jax] Jambi Malay, [vkk] Kaur, [meo] Kedah Malay, [kvr] Kerinci, [mqg] Kota Bangun Kutai Malay, [kvb] Kubu, [lce] Loncong, [lcf] Lubu, [zlm] Malay (Einzelsprache), [xmm] Manado Malay, [min] Minangkabau, [mui] Musi, [zmi] Negeri Sembilan Malay, [max] North Moluccan Malay, [orn] Orang Kanaq, [ors] Orang Seletar, [mfa] Pattani Malay, [pel] Pekal, [msi] Sabah Malay, [tmw] Temuan, [vkt] Tenggarong Kutai Malay, [urk] Urak Lawoi'" +Malayalam,Dravidisch,Malayalam,മലയാളം,ml,mal,mal,mal, +Maltesisch,Afroasiatisch,Maltese,Malti,mt,mlt,mlt,mlt, +Maori,Austronesisch,Maori,te reo Māori,mi,mri,mao,mri,auch bekannt als Māori +Marathi,Indoeuropäisch,Marathi,मराठी,mr,mar,mar,mar,auch bekannt als Marāṭhī +Marshallesisch,Austronesisch,Marshallese,Kajin Ṃajeḷ,mh,mah,mah,mah, +Mongolisch,Mongolisch,Mongolian,Монгол хэл,mn,mon,mon,mon + 2,"Makrosprache: [khk] Halh Mongolian, [mvf] Peripheral Mongolian" +Nauruisch,Austronesisch,Nauru,Dorerin Naoero,na,nau,nau,nau,auch bekannt als Nauruan +Navajo,Na-Dené,"Navajo, Navaho",Diné bizaad,nv,nav,nav,nav, +Nord-Ndebele,Niger-Kongo,North Ndebele,isiNdebele,nd,nde,nde,nde,auch bekannt als Northern Ndebele +Nepali,Indoeuropäisch,Nepali,नेपाली,ne,nep,nep,nep + 2,"Makrosprache: [dty] Dotyali, [npi] Nepali (Einzelsprache)" +Ndonga,Niger-Kongo,Ndonga,Owambo,ng,ndo,ndo,ndo,Dialektzweig von Oshivambo +Bokmål,Indoeuropäisch,Norwegian Bokmål,Norsk Bokmål,nb,nob,nob,nob,Abgedeckt durch Makrosprache [no/nor] +Nynorsk,Indoeuropäisch,Norwegian Nynorsk,Norsk Nynorsk,nn,nno,nno,nno,Abgedeckt durch Makrosprache [no/nor] +Norwegisch,Indoeuropäisch,Norwegian,Norsk,no,nor,nor,nor + 2,"Makrosprache: [nb/nob] Bokmål, [nn/nno] Nynorsk" +Yi,Sinotibetisch,"Sichuan Yi, Nuosu","ꆈꌠ꒿, Nuosuhxop",ii,iii,iii,iii,Standardform der Lolo-Sprachen +Süd-Ndebele,Niger-Kongo,South Ndebele,isiNdebele,nr,nbl,nbl,nbl,auch bekannt als Southern Ndebele +Okzitanisch,Indoeuropäisch,Occitan,"occitan, lenga d'òc",oc,oci,oci,oci, +Ojibwe,Algonkin,Ojibwa,ᐊᓂᔑᓈᐯᒧᐎᓐ,oj,oji,oji,oji + 7,"Makrosprache: [ciw] Chippewa, [ojb] Northwestern Ojibwa, [ojc] Central Ojibwa, [ojg] Eastern Ojibwa, [ojs] Severn Ojibwa, [ojw] Western Ojibwa, [otw] Ottawa" +"Kirchenslawisch, Altkirchenslawisch",Indoeuropäisch,"Church Slavic, Old Slavonic, Church Slavonic, Old Bulgarian, Old Church Slavonic",ѩзыкъ словѣньскъ,cu,chu,chu,chu,"Alte Sprache, in Gebrauch in der Orthodoxen Kirche" +Oromo,Afroasiatisch,Oromo,Afaan Oromoo,om,orm,orm,orm + 4,"Makrosprache: [gax] Borana-Arsi-Guji Oromo, [hae] Eastern Oromo, [orc] Orma, [gaz] West Central Oromo" +Oriya,Indoeuropäisch,Oriya,ଓଡ଼ିଆ,or,ori,ori,ori + 2,"auch bekannt als Odia. Makrosprache: [ory] Odia, [spv] Sambalpuri" +Ossetisch,Indoeuropäisch,"Ossetian, Ossetic",ирон æвзаг,os,oss,oss,oss, +"Panjabi, Pandschabi",Indoeuropäisch,"Panjabi, Punjabi",ਪੰਜਾਬੀ,pa,pan,pan,pan, +Pali,Indoeuropäisch,Pali,"पालि, पाळि",pi,pli,pli,pli,"alte Sprache, auch bekannt als Pāli; heute eher als Literatursprache eingestuft" +Persisch,Indoeuropäisch,Persian,فارسی,fa,fas,per,fas + 2,"auch bekannt als Farsi. Makrosprache: [prs] Dari Persian, [pes] Western Persian" +Polnisch,Indoeuropäisch,Polish,"język polski, polszczyzna",pl,pol,pol,pol, +Paschtunisch,Indoeuropäisch,"Pashto, Pushto",پښتو,ps,pus,pus,pus + 3,"Makrosprache: [pst] Central Pashto, [pbu] Northern Pashto, [pbt] Southern Pashto" +Portugiesisch,Indoeuropäisch,Portuguese,Português,pt,por,por,por, +Quechua,Quechua,Quechua,"Runa Simi, Kichwa",qu,que,que,que + 43,"Makrosprache: [qva] Ambo-Pasco Quechua, [qxu] Arequipa-La Unión Quechua, [quy] Ayacucho Quechua, [qvc] Cajamarca Quechua, [qvl] Cajatambo North Lima Quechua, [qud] Calderón Highland Quichua, [qxr] Cañar Highland Quichua, [quk] Chachapoyas Quechua, [qug] Chimborazo Highland Quichua, [qxc] Chincha Quechua, [qxa] Chiquián Ancash Quechua, [qwc] Classical Quechua, [qwa] Corongo Ancash Quechua, [quz] Cusco Quechua, [qve] Eastern Apurímac Quechua, [qub] Huallaga Huánuco Quechua, [qvh] Huamalíes-Dos de Mayo Huánuco Quechua, [qwh] Huaylas Ancash Quechua, [qvw] Huaylla Wanca Quechua, [qvi] Imbabura Highland Quichua, [qxw] Jauja Wanca Quechua, [quf] Lambayeque Quechua, [qvj] Loja Highland Quichua, [qvm] Margos-Yarowilca-Lauricocha Quechua, [qvo] Napo Lowland Quechua, [qul] North Bolivian Quechua, [qvn] North Junín Quechua, [qxn] Northern Conchucos Ancash Quechua, [qvz] Northern Pastaza Quichua, [qvp] Pacaraos Quechua, [qxh] Panao Huánuco Quechua, [qxp] Puno Quechua, [qxl] Salasaca Highland Quichua, [qvs] San Martín Quechua, [qxt] Santa Ana de Tusi Pasco Quechua, [qus] Santiago del Estero Quichua, [qws] Sihuas Ancash Quechua, [quh] South Bolivian Quechua, [qxo] Southern Conchucos Ancash Quechua, [qup] Southern Pastaza Quechua, [quw] Tena Lowland Quichua, [qur] Yanahuanca Pasco Quechua, [qux] Yauyos Quechua" +"Bündnerromanisch, Romanisch",Indoeuropäisch,Romansh,"Rumantsch, Romontsch, Rumauntsch",rm,roh,roh,roh,"Rumantsch Grischun, 1982 entwickelte gemeinsame Schriftsprache der Rätoromanen Graubündens, die seit 2001 auf Kantonsebene als romanische Amtssprache dient" +Kirundi,Niger-Kongo,Rundi,Ikirundi,rn,run,run,run,auch bekannt als Rundisch +Rumänisch,Indoeuropäisch,"Romanian, Moldavian, Moldovan",Română,ro,ron,rum,ron,"Die Codes [mo/mol] sind überholt. Es gelten [ro/ron] (639-2/T) und [rum] (639-2/B) als gültige Codes für die Varietät der rumänischen Sprache, bekannt als Moldauisch bzw. Moldawisch. Die Codes [mo/mol] werden jedoch nicht freigegeben, wodurch entsprechende Kodierungen ihre Gültigkeit nicht verlieren." +Russisch,Indoeuropäisch,Russian,русский,ru,rus,rus,rus, +Sanskrit,Indoeuropäisch,Sanskrit,संस्कृतम्,sa,san,san,san,"Alte Sprache, auch bekannt als Saṃskṛta" +Sardisch,Indoeuropäisch,Sardinian,sardu,sc,srd,srd,srd + 4,"Makrosprache: [sro] Campidanese Sardinian, [sdn] Gallurese Sardinian, [src] Logudorese Sardinian, [sdc] Sassarese Sardinian" +Sindhi,Indoeuropäisch,Sindhi,"सिन्धी,سنڌي، سندھی",sd,snd,snd,snd, +Nordsamisch,Uralisch,Northern Sami,Davvisámegiella,se,sme,sme,sme, +(Serbokroatisch),Indoeuropäisch,Serbo-Croatian,"српскохрватски, srpskohrvatski",(sh),,"(scc, scr)",hbs,"[sh] ist veraltet und wurde durch [bs], [hr] und [sr] ersetzt" +Samoanisch,Austronesisch,Samoan,gagana fa'a Samoa,sm,smo,smo,smo, +Sango,Kreol,Sango,yângâ tî sängö,sg,sag,sag,sag, +Serbisch,Indoeuropäisch,Serbian,"српски језик, srpski jezik",sr,srp,srp,srp,Der ISO-639-2/T-Code [srp] ersetzte den ISO-639-2/B-Code [scc] +Schottisch-gälisch,Indoeuropäisch,"Gaelic, Scottish Gaelic",Gàidhlig,gd,gla,gla,gla, +Shona,Niger-Kongo,Shona,chiShona,sn,sna,sna,sna, +Singhalesisch,Indoeuropäisch,"Sinhala, Sinhalese",සිංහල,si,sin,sin,sin, +Slowakisch,Indoeuropäisch,Slovak,"slovenčina, slovenský jazyk",sk,slk,slo,slk, +Slowenisch,Indoeuropäisch,Slovenian,"slovenski jezik, slovenščina",sl,slv,slv,slv,auch bekannt als Slovene +Somali,Afroasiatisch,Somali,"Soomaaliga, af Soomaali",so,som,som,som, +"Sesotho, Süd-Sotho",Niger-Kongo,Southern Sotho,Sesotho,st,sot,sot,sot, +"Spanisch, Kastilisch",Indoeuropäisch,"Spanish, Castilian",Español,es,spa,spa,spa, +Sundanesisch,Austronesisch,Sundanese,Basa Sunda,su,sun,sun,sun, +Swahili,Niger-Kongo,Swahili,Kiswahili,sw,swa,swa,swa + 2,"Makrosprache: [swc] Congo Swahili, [swh] Swahili (Einzelsprache)" +Siswati,Niger-Kongo,Swati,SiSwati,ss,ssw,ssw,ssw,auch bekannt als Swazi +Schwedisch,Indoeuropäisch,Swedish,Svenska,sv,swe,swe,swe, +Tamil,Dravidisch,Tamil,தமிழ்,ta,tam,tam,tam, +Telugu,Dravidisch,Telugu,తెలుగు,te,tel,tel,tel, +Tadschikisch,Indoeuropäisch,Tajik,"тоҷикӣ, toçikī,تاجیکی",tg,tgk,tgk,tgk, +Thai,Tai-Kadai,Thai,ไทย,th,tha,tha,tha, +Tigrinya,Afroasiatisch,Tigrinya,ትግርኛ,ti,tir,tir,tir, +Tibetisch,Sinotibetisch,Tibetan,བོད་ཡིག,bo,bod,tib,bod,auch bekannt als Standard Tibetan +Turkmenisch,Turk,Turkmen,"Türkmen, Түркмен",tk,tuk,tuk,tuk, +Tagalog,Austronesisch,Tagalog,Wikang Tagalog,tl,tgl,tgl,tgl,Filipino (Pilipino) hat den Code [fil] +Setswana,Niger-Kongo,Tswana,Setswana,tn,tsn,tsn,tsn, +Tongaisch,Austronesisch,Tonga (Tonga Islands),Faka Tonga,to,ton,ton,ton,auch bekannt als Tongan +Türkisch,Turk,Turkish,Türkçe,tr,tur,tur,tur, +Xitsonga,Niger-Kongo,Tsonga,Xitsonga,ts,tso,tso,tso, +Tatarisch,Turk,Tatar,"татар теле, tatar tele",tt,tat,tat,tat, +Twi,Niger-Kongo,Twi,Twi,tw,twi,twi,twi,Abgedeckt durch Makrosprache [ak/aka] +"Tahitianisch, Tahitisch",Austronesisch,Tahitian,Reo Tahiti,ty,tah,tah,tah,Eine der Reo Mā`ohi in Französisch-Polynesien +Uigurisch,Turk,"Uighur, Uyghur","Uyghurche,ئۇيغۇرچە",ug,uig,uig,uig, +Ukrainisch,Indoeuropäisch,Ukrainian,Українська,uk,ukr,ukr,ukr, +Urdu,Indoeuropäisch,Urdu,اردو,ur,urd,urd,urd, +Usbekisch,Turk,Uzbek,"Oʻzbek, Ўзбек,أۇزبېك",uz,uzb,uzb,uzb + 2,"Makrosprache: [uzn] Northern Uzbek, [uzs] Southern Uzbek" +Tshivenda,Niger-Kongo,Venda,Tshivenḓa,ve,ven,ven,ven, +Vietnamesisch,Austroasiatisch,Vietnamese,Tiếng Việt,vi,vie,vie,vie, +Volapük,Plansprache,Volapük,Volapük,vo,vol,vol,vol,Plansprache +Wallonisch,Indoeuropäisch,Walloon,Walon,wa,wln,wln,wln, +Walisisch,Indoeuropäisch,Welsh,Cymraeg,cy,cym,wel,cym, +Wolof,Niger-Kongo,Wolof,Wollof,wo,wol,wol,wol, +Westfriesisch,Indoeuropäisch,Western Frisian,Frysk,fy,fry,fry,fry,auch bekannt als Frisian +isiXhosa,Niger-Kongo,Xhosa,isiXhosa,xh,xho,xho,xho, +Jiddisch,Indoeuropäisch,Yiddish,ייִדיש,yi,yid,yid,yid + 2,"Makrosprache: [ydd] Eastern Yiddish, [yih] Western Yiddish. Geändert 1989 von ursprünglich ISO 639:1988 [ji]" +Yoruba,Niger-Kongo,Yoruba,Yorùbá,yo,yor,yor,yor, +Zhuang,Tai-Kadai,"Zhuang, Chuang","Saɯ cueŋƅ, Saw cuengh",za,zha,zha,zha + 16,"Makrosprache: [zch] Central Hongshuihe Zhuang, [zhd] Dai Zhuang, [zeh] Eastern Hongshuihe Zhuang, [zgb] Guibei Zhuang, [zgn] Guibian Zhuang, [zln] Lianshan Zhuang, [zlj] Liujiang Zhuang, [zlq] Liuqian Zhuang, [zgm] Minz Zhuang, [zhn] Nong Zhuang, [zqe] Qiubei Zhuang, [zyg] Yang Zhuang, [zyb] Yongbei Zhuang, [zyn] Yongnan Zhuang, [zyj] Youjiang Zhuang, [zzj] Zuojiang Zhuang" +isiZulu,Niger-Kongo,Zulu,isiZulu,zu,zul,zul,zul, diff --git a/data/seed_data/skills.csv b/data/seed_data/skills.csv new file mode 100644 index 0000000..6dcb6b7 --- /dev/null +++ b/data/seed_data/skills.csv @@ -0,0 +1,5 @@ +id,name +1,PHP +2,Vue.js +3,Python +4,JavaScript diff --git a/ki/commands.py b/ki/commands.py index 6d1fa98..119f2cc 100644 --- a/ki/commands.py +++ b/ki/commands.py @@ -1,9 +1,34 @@ -from ki.models import Skill +import csv + +from ki.models import Language, Skill from app import app, db @app.cli.command("seed") def seed(): - db.session.add(Skill(id=1, name="PHP")) - db.session.add(Skill(id=2, name="Vue.js")) + + skill_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/skills.csv" + + with open(skill_seed_file_path) as skills_file: + skills_csv_reader = csv.DictReader(skills_file) + + for skill in skills_csv_reader: + id = int(skill["id"]) + db_skill = Skill.query.get(id) + + if db_skill is None: + db.session.add(Skill(id=int(skill["id"]), name=skill["name"])) + + iso_seed_file_path = app.config["KI_DATA_DIR"] + "/seed_data/iso_639_1.csv" + + with open(iso_seed_file_path) as iso_file: + iso_csv_reader = csv.DictReader(iso_file) + + for iso in iso_csv_reader: + id = iso["639-1"] + db_language = Language.query.get(id) + + if db_language is None: + db.session.add(Language(id=iso["639-1"], name=iso["Sprache"])) + db.session.commit() diff --git a/ki/models.py b/ki/models.py index 4bfc209..39e00ba 100644 --- a/ki/models.py +++ b/ki/models.py @@ -12,7 +12,7 @@ user_skill_table = Table("user_skill", db.Model.metadata, user_language_table = Table( "user_language", db.Model.metadata, Column("user_id", Integer, ForeignKey("user.id")), - Column("language_id", Integer, ForeignKey("language.id"))) + Column("language_id", String(2), ForeignKey("language.id"))) class User(db.Model): @@ -86,9 +86,12 @@ class Skill(db.Model): class Language(db.Model): __tablename__ = "language" - id = Column(Integer, primary_key=True) + id = Column(String(2), primary_key=True) name = Column(String(25), nullable=False) users = relationship("User", secondary=user_language_table, back_populates="languages") + + def to_dict(self): + return {"id": self.id, "name": self.name} diff --git a/ki/routes.py b/ki/routes.py index 20c12cf..ac61ba6 100644 --- a/ki/routes.py +++ b/ki/routes.py @@ -1,7 +1,7 @@ import os -from flask import jsonify, make_response, request, send_file +from flask import make_response, request, send_file -from ki.models import Skill +from ki.models import Language, Skill from app import app @@ -14,6 +14,52 @@ def models_to_list(models): return models_list +def handle_completion_request(model, key): + query = model.query + + if "search" in request.args: + query = query.filter(model.name.startswith(request.args.get("search"))) + + results = query.order_by(model.name) \ + .limit(10) \ + .all() + + api_results = models_to_list(results) + response_data = {} + response_data[key] = api_results + return response_data + + +def handle_icon_request(model, id, path): + object = model.query.get(id) + + if object is None: + return make_response({}, 404) + + icon_base_path = path + str(id) + icon_svg_path = icon_base_path + ".svg" + + if os.path.exists(icon_svg_path): + return send_file(icon_svg_path, mimetype="image/svg") + + icon_png_path = icon_base_path + ".png" + + if os.path.exists(icon_png_path): + return send_file(icon_png_path, mimetype="image/png") + + unknown_svg_path = path + "unknown.svg" + + if os.path.exists(unknown_svg_path): + return send_file(unknown_svg_path, mimetype="image/svg") + + unknown_png_path = path + "unknown.png" + + if os.path.exists(unknown_png_path): + return send_file(unknown_png_path, mimetype="image/png") + + return make_response({"error": "icon not found"}, 404) + + @app.route("/") def hello_world(): return "KI" @@ -21,33 +67,21 @@ def hello_world(): @app.route("/skills") def get_skills(): - skills_query = Skill.query + return handle_completion_request(Skill, "skills") - if "search" in request.args: - skills_query = skills_query.filter(Skill.name.startswith(request.args.get("search"))) - - skills = skills_query.order_by(Skill.name) \ - .limit(10) \ - .all() - - api_skills = models_to_list(skills) - response_data = {"skills": api_skills} - return response_data @app.route("/skills//icon") def get_skill_icon(skill_id): - skill = Skill.query.get(skill_id) + skill_icons_path = app.config["KI_DATA_DIR"] + "/imgs/skill_icons/" + return handle_icon_request(Skill, skill_id, skill_icons_path) - if skill is None: - return make_response(jsonify([]), 404) - icons_base_path = app.config["KI_DATA_PATH"] + "/skill_icons/" - icon_base_path = icons_base_path + str(skill.id) - icon_svg_path = icon_base_path + ".svg" +@app.route("/languages") +def get_languages(): + return handle_completion_request(Language, "languages") - if os.path.exists(icon_svg_path): - return send_file(icon_svg_path, mimetype="image/svg") - - fallback_icon_path = app.config["KI_DATA_PATH"] + "/skill_icons/placeholder.svg" - return send_file(fallback_icon_path, mimetype="image/svg") +@app.route("/languages//icon") +def get_language_icon(language_id): + language_flags_path = app.config["KI_DATA_DIR"] + "/imgs/flags/" + return handle_icon_request(Language, language_id, language_flags_path) diff --git a/migrations/versions/4ff86e9f6a43_initial_migration.py b/migrations/versions/ad03a0d79a90_initial_migration.py similarity index 93% rename from migrations/versions/4ff86e9f6a43_initial_migration.py rename to migrations/versions/ad03a0d79a90_initial_migration.py index 6fa1c55..6075f45 100644 --- a/migrations/versions/4ff86e9f6a43_initial_migration.py +++ b/migrations/versions/ad03a0d79a90_initial_migration.py @@ -1,8 +1,8 @@ """Initial migration -Revision ID: 4ff86e9f6a43 +Revision ID: ad03a0d79a90 Revises: -Create Date: 2021-06-07 17:25:08.792899 +Create Date: 2021-06-07 21:32:07.388574 """ from alembic import op @@ -10,7 +10,7 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. -revision = '4ff86e9f6a43' +revision = 'ad03a0d79a90' down_revision = None branch_labels = None depends_on = None @@ -24,7 +24,7 @@ def upgrade(): sa.PrimaryKeyConstraint('id') ) op.create_table('language', - sa.Column('id', sa.Integer(), nullable=False), + sa.Column('id', sa.String(length=2), nullable=False), sa.Column('name', sa.String(length=25), nullable=False), sa.PrimaryKeyConstraint('id') ) @@ -68,7 +68,7 @@ def upgrade(): ) op.create_table('user_language', sa.Column('user_id', sa.Integer(), nullable=True), - sa.Column('language_id', sa.Integer(), nullable=True), + sa.Column('language_id', sa.String(length=2), nullable=True), sa.ForeignKeyConstraint(['language_id'], ['language.id'], ), sa.ForeignKeyConstraint(['user_id'], ['user.id'], ) )