Ejemplo n.º 1
0
def load(secure, hostname, url, schema, table, codeset, verbose=False):
    if verbose: show("begin")

    # make "columnlist" separately (type has no meaning as we're not creating table)
    row = {
        'koodisto': None,
        'koodi': None,
        'nimi': None,
        'nimi_sv': None,
        'nimi_en': None,
        'alkupvm': None,
        'loppupvm': None
    }
    # setup dboperator variables so insert works
    dboperator.columns(row)

    #show("empty sa_koodistot")
    #dboperator.empty("sa_koodistot")

    reqheaders = {
        'Content-Type': 'application/json',
        'Caller-Id': '1.2.246.562.10.2013112012294919827487.vipunen'
    }

    url = url % codeset
    address = hostname + url
    if secure:
        show("load securely from " + address)
        httpconn = httplib.HTTPSConnection(hostname)
    else:
        show("load from " + address)
        httpconn = httplib.HTTPConnection(hostname)

    httpconn.request('GET', url, headers=reqheaders)
    #httpconn.request('GET', url)
    r = httpconn.getresponse()
    j = json.loads(r.read())
    cnt = 0
    if verbose:
        show("delete from %s.%s where koodisto=%s" % (schema, table, codeset))
    dboperator.remove(schema, table, "koodisto", codeset)
    for i in j:
        cnt += 1
        # make "row"
        row["koodisto"] = codeset
        # columns
        row["koodi"] = i["koodiArvo"]
        row["nimi"] = getnimi(i, "FI")
        row["nimi_sv"] = getnimi(i, "SV")
        row["nimi_en"] = getnimi(i, "EN")
        row["alkupvm"] = i["voimassaAlkuPvm"]
        row["loppupvm"] = i["voimassaLoppuPvm"]

        if verbose: show("-- %s -- %d -- %s" % (codeset, cnt, row["koodi"]))
        dboperator.insert(address, schema, table, row)

    dboperator.close()

    if verbose: show("ready")
Ejemplo n.º 2
0
def load(secure, hostname, url, schema, table, codeset, verbose=False):
    if verbose: show("begin")

    row = makerow()
    dboperator.columns(row)

    if verbose: show("empty %s.%s" % (schema, table))
    dboperator.empty(schema, table)

    url = url % codeset  # replace placeholder
    if secure:
        httpconn = httplib.HTTPSConnection(hostname)
        show("load securely from " + hostname + url)
    else:
        httpconn = httplib.HTTPConnection(hostname)
        show("load from " + hostname + url)

    httpconn.request('GET', url)
    r = httpconn.getresponse()
    j = json.loads(r.read())
    cnt = 0
    for i in j:
        cnt += 1
        row = makerow()

        row["koodi"] = jv(i, "koodiArvo")
        row["nimi"] = getnimi(i, "FI")
        row["nimi_sv"] = getnimi(i, "SV")
        row["nimi_en"] = getnimi(i, "EN")
        row["alkupvm"] = jv(i, "voimassaAlkuPvm")
        row["loppupvm"] = jv(i, "voimassaLoppuPvm")

        httpconn.request(
            'GET',
            "/koodisto-service/rest/json/relaatio/sisaltyy-ylakoodit/%s" %
            i["koodiUri"])
        rr = httpconn.getresponse()
        jj = json.loads(rr.read())
        ss = ""
        for ii in jj:
            classification = "maanosat"
            level = ""
            if len(ii["koodiArvo"]) == 3:
                level = "3"
            elif len(ii["koodiArvo"]) == 2:
                level = "2"
            # else default
            if ii["koodisto"]["koodistoUri"] == classification:
                row[classification + level + "koodi"] = jv(ii, "koodiArvo")
                row[classification + level + "nimi"] = getnimi(ii, "FI")
                row[classification + level + "nimi_sv"] = getnimi(ii, "SV")
                row[classification + level + "nimi_en"] = getnimi(ii, "EN")

        if verbose: show("%d -- %s" % (cnt, row["koodi"]))
        dboperator.insert(hostname + url, schema, table, row)

    dboperator.close()

    if verbose: show("ready")
def load(secure,hostname,url,schema,table,codeset,verbose=False):
  if verbose: show("begin")

  row = makerow()
  dboperator.columns(row)

  if verbose: show("empty %s.%s"%(schema,table))
  dboperator.empty(schema,table)

  url = url % codeset # replace placeholder
  if secure:
    httpconn = httplib.HTTPSConnection(hostname)
    show("load securely from "+hostname+url)
  else:
    httpconn = httplib.HTTPConnection(hostname)
    show("load from "+hostname+url)

  httpconn.request('GET', url)
  r = httpconn.getresponse()
  j = json.loads(r.read())
  cnt = 0
  for i in j:
    cnt += 1
    row = makerow()

    row["koodi"] = jv(i,"koodiArvo")
    row["nimi"] = getnimi(i,"FI")
    row["nimi_sv"] = getnimi(i,"SV")
    row["nimi_en"] = getnimi(i,"EN")
    row["alkupvm"] = jv(i,"voimassaAlkuPvm")
    row["loppupvm"] = jv(i,"voimassaLoppuPvm")

    httpconn.request('GET', "/koodisto-service/rest/json/relaatio/sisaltyy-ylakoodit/%s" % i["koodiUri"])
    rr = httpconn.getresponse()
    jj = json.loads(rr.read())
    ss = ""
    for ii in jj:
      classification = "maanosat"
      level = ""
      if len(ii["koodiArvo"])==3:
        level = "3"
      elif len(ii["koodiArvo"])==2:
        level = "2"
      # else default
      if ii["koodisto"]["koodistoUri"] == classification:
        row[classification+level+"koodi"] = jv(ii,"koodiArvo")
        row[classification+level+"nimi"] = getnimi(ii,"FI")
        row[classification+level+"nimi_sv"] = getnimi(ii,"SV")
        row[classification+level+"nimi_en"] = getnimi(ii,"EN")

    if verbose: show("%d -- %s"%(cnt,row["koodi"]))
    dboperator.insert(hostname+url,schema,table,row)

  dboperator.close()

  if verbose: show("ready")
Ejemplo n.º 4
0
def load(hostname, url, schema, table, verbose=False, debug=False):
    if verbose: show("begin")

    row = makerow()
    dboperator.columns(row, debug)

    if verbose: show("empty %s.%s" % (schema, table))
    dboperator.empty(schema, table, debug)

    httpconn = httplib.HTTPSConnection(hostname)
    show("load securely from " + hostname + url)

    # get list of oids
    reqheaders = {'Caller-Id': '1.2.246.562.10.2013112012294919827487.vipunen'}
    httpconn.request('GET', url, headers=reqheaders)
    #httpconn.request('GET', url)
    rr = httpconn.getresponse()
    jj = json.loads(rr.read())
    cnt = 0
    for ii in jj["result"]:
        cnt += 1
        # show some sign of being alive
        if cnt % 100 == 0:
            sys.stdout.write('.')
            sys.stdout.flush()
        if cnt % 1000 == 0:
            show("-- %d" % (cnt))

        url = "/tarjonta-service/rest/v1/hakukohde/%s?populateAdditionalKomotoFields=true" % (
            ii["oid"])
        try:
            httpconn.request('GET', url, headers=reqheaders)
            r = httpconn.getresponse()
            j = json.loads(r.read())
        except ValueError as e:
            show("-- %d -- could not load %s" % (cnt, ii["oid"]))
        else:
            if j["status"] == "NOT FOUND":
                continue
            if j["status"] == "OK":
                i = j["result"]
                row = makerow()

                for col in row:
                    row[col] = None if col not in i else i[col]
                    if type(row[col]) is list:
                        row[col] = ''.join(map(str, json.dumps(row[col])))

            if verbose: show("%d -- %s" % (cnt, row["oid"]))
            if debug: print(row)
            dboperator.insert(hostname + url, schema, table, row, debug)

    if verbose: show("ready")
def load(secure,hostname,url,schema,table,codeset,verbose=False,debug=False):
  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" begin"

  row = makerow()
  dboperator.columns(row,debug)

  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" empty %s.%s"%(schema,table)
  dboperator.empty(schema,table,debug)

  url = url % codeset # replace placeholder
  if secure:
    httpconn = httplib.HTTPSConnection(hostname)
    print strftime("%Y-%m-%d %H:%M:%S", localtime())+" load securely from "+hostname+url
  else:
    httpconn = httplib.HTTPConnection(hostname)
    print strftime("%Y-%m-%d %H:%M:%S", localtime())+" load from "+hostname+url

  httpconn.request('GET', url)
  r = httpconn.getresponse()
  j = json.loads(r.read())
  cnt = 0
  for i in j:
    cnt += 1
    row = makerow()

    row["koodi"] = jv(i,"koodiArvo")
    row["nimi"] = getnimi(i,"FI")
    row["nimi_sv"] = getnimi(i,"SV")
    row["nimi_en"] = getnimi(i,"EN")
    row["alkupvm"] = jv(i,"voimassaAlkuPvm")
    row["loppupvm"] = jv(i,"voimassaLoppuPvm")

    httpconn.request('GET', "/koodisto-service/rest/json/relaatio/sisaltyy-ylakoodit/%s" % i["koodiUri"])
    rr = httpconn.getresponse()
    jj = json.loads(rr.read())
    ss = ""
    for ii in jj:
      if ii["koodisto"]["koodistoUri"] == "julkaisunpaaluokka":
        row["julkaisunpaaluokkakoodi"] = jv(ii,"koodiArvo")
        row["julkaisunpaaluokkanimi"] = getnimi(ii,"FI")
        row["julkaisunpaaluokkanimi_sv"] = getnimi(ii,"SV")
        row["julkaisunpaaluokkanimi_en"] = getnimi(ii,"EN")

    if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" %d -- %s"%(cnt,row["koodi"])
    dboperator.insert(hostname+url,schema,table,row,debug)

  dboperator.close(debug)

  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" ready"
Ejemplo n.º 6
0
def load(secure,hostname,url,schema,table,codeset,verbose=False,debug=False):
  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" begin"

  row = makerow()
  dboperator.columns(row,debug)

  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" empty %s.%s"%(schema,table)
  dboperator.empty(schema,table,debug)

  url = url % codeset # replace placeholder
  if secure:
    httpconn = httplib.HTTPSConnection(hostname)
    print strftime("%Y-%m-%d %H:%M:%S", localtime())+" load securely from "+hostname+url
  else:
    httpconn = httplib.HTTPConnection(hostname)
    print strftime("%Y-%m-%d %H:%M:%S", localtime())+" load from "+hostname+url

  httpconn.request('GET', url)
  r = httpconn.getresponse()
  j = json.loads(r.read())
  cnt = 0
  for i in j:
    cnt += 1
    row = makerow()

    row["koodi"] = jv(i,"koodiArvo")
    row["nimi"] = getnimi(i,"FI")
    row["nimi_sv"] = getnimi(i,"SV")
    row["nimi_en"] = getnimi(i,"EN")
    row["alkupvm"] = jv(i,"voimassaAlkuPvm")
    row["loppupvm"] = jv(i,"voimassaLoppuPvm")

    httpconn.request('GET', "/koodisto-service/rest/json/relaatio/sisaltyy-ylakoodit/%s" % i["koodiUri"])
    rr = httpconn.getresponse()
    jj = json.loads(rr.read())
    ss = ""
    for ii in jj:
      if ii["koodisto"]["koodistoUri"] == "paatieteenala":
        row["paatieteenalakoodi"] = jv(ii,"koodiArvo")
        row["paatieteenalanimi"] = getnimi(ii,"FI")
        row["paatieteenalanimi_sv"] = getnimi(ii,"SV")
        row["paatieteenalanimi_en"] = getnimi(ii,"EN")

    if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" %d -- %s"%(cnt,row["koodi"])
    dboperator.insert(hostname+url,schema,table,row,debug)

  dboperator.close(debug)

  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" ready"
def load(hostname,url,schema,table,verbose=False,debug=False):
  if verbose: show("begin")

  row = makerow()
  dboperator.columns(row,debug)

  if verbose: show("empty %s.%s"%(schema,table))
  dboperator.empty(schema,table,debug)

  httpconn = httplib.HTTPSConnection(hostname)
  show("load securely from "+hostname+url)

  # get list of oids
  httpconn.request('GET', url)
  rr = httpconn.getresponse()
  jj = json.loads(rr.read())
  cnt = 0
  for ii in jj["result"]:
    cnt += 1
    # show some sign of being alive
    if cnt%100 == 0:
      sys.stdout.write('.')
      sys.stdout.flush()
    if cnt%1000 == 0:
      show("-- %d" % (cnt))

    url = "/tarjonta-service/rest/v1/hakukohde/%s?populateAdditionalKomotoFields=true"%(ii["oid"])
    try:
      httpconn.request('GET', url)
      r = httpconn.getresponse()
      j = json.loads(r.read())
    except ValueError, e:
      show("-- %d -- could not load %s"%(cnt,ii["oid"]))
    else:
      if j["status"] == "NOT FOUND":
          continue
      if j["status"] == "OK":
          i = j["result"]
          row = makerow()

          for col in row:
              row[col] = None if col not in i else i[col]
              if type(row[col]) is list:
                  row[col] = ''.join(map(str,json.dumps(row[col])))

      if verbose: show("%d -- %s"%(cnt,row["oid"]))
      if debug: print row
      dboperator.insert(hostname+url,schema,table,row,debug)
Ejemplo n.º 8
0
def load(secure,hostname,url,schema,table,codeset,verbose=False):
  if verbose: show("begin")

  # make "columnlist" separately (type has no meaning as we're not creating table)
  row = {'koodisto':None,'koodi':None,'nimi':None,'nimi_sv':None,'nimi_en':None,'alkupvm':None,'loppupvm':None}
  # setup dboperator variables so insert works
  dboperator.columns(row)

  #show("empty sa_koodistot")
  #dboperator.empty("sa_koodistot")

  url = url % codeset
  address = hostname+url
  if secure:
    show("load securely from "+address)
    httpconn = httplib.HTTPSConnection(hostname)
  else:
    show("load from "+address)
    httpconn = httplib.HTTPConnection(hostname)

  httpconn.request('GET', url)
  r = httpconn.getresponse()
  j = json.loads(r.read())
  cnt = 0
  if verbose: show("delete from %s.%s where koodisto=%s"%(schema,table,codeset))
  dboperator.remove(schema,table,"koodisto",codeset)
  for i in j:
    cnt += 1
    # make "row"
    row["koodisto"] = codeset
    # columns
    row["koodi"] = i["koodiArvo"]
    row["nimi"] = getnimi(i,"FI")
    row["nimi_sv"] = getnimi(i,"SV")
    row["nimi_en"] = getnimi(i,"EN")
    row["alkupvm"] = i["voimassaAlkuPvm"]
    row["loppupvm"] = i["voimassaLoppuPvm"]

    if verbose: show("-- %s -- %d -- %s"%(codeset,cnt,row["koodi"]))
    dboperator.insert(address,schema,table,row)

  dboperator.close()

  if verbose: show("ready")
Ejemplo n.º 9
0
def load(hostname, url, schema, table, verbose=False, debug=False):
    if verbose: show("begin")

    row = makerow()
    dboperator.columns(row, debug)

    if verbose: show("empty %s.%s" % (schema, table))
    dboperator.empty(schema, table, debug)

    httpconn = httplib.HTTPSConnection(hostname)
    show("load securely from " + hostname + url)

    reqheaders = {'Caller-Id': '1.2.246.562.10.2013112012294919827487.vipunen'}
    httpconn.request('GET', url, headers=reqheaders)
    #httpconn.request('GET', url)
    r = httpconn.getresponse()
    j = json.loads(r.read())
    cnt = 0
    for i in j["result"]:
        cnt += 1
        # show some sign of being alive
        if cnt % 100 == 0:
            sys.stdout.write('.')
            sys.stdout.flush()
        if cnt % 1000 == 0:
            show("-- %d" % (cnt))

        row = makerow()

        for col in row:
            if col == "nimi":
                row["nimi"] = getnimi(i, "fi")
                row["nimi_sv"] = getnimi(i, "sv")
                row["nimi_en"] = getnimi(i, "en")
            else:
                row[col] = None if col not in i else i[col]
            if type(row[col]) is list:
                row[col] = ''.join(map(str, json.dumps(row[col])))

        if verbose: show("%d -- %s" % (cnt, row["oid"]))
        if debug: print(row)
        dboperator.insert(hostname + url, schema, table, row, debug)

    if verbose: show("ready")
def load(hostname,url,schema,table,verbose=False,debug=False):
  if verbose: show("begin")

  row = makerow()
  dboperator.columns(row,debug)

  if verbose: show("empty %s.%s"%(schema,table))
  dboperator.empty(schema,table,debug)

  httpconn = httplib.HTTPSConnection(hostname)
  show("load securely from "+hostname+url)

  httpconn.request('GET', url)
  r = httpconn.getresponse()
  j = json.loads(r.read())
  cnt = 0
  for i in j["result"]:
    cnt += 1
    # show some sign of being alive
    if cnt%100 == 0:
      sys.stdout.write('.')
      sys.stdout.flush()
    if cnt%1000 == 0:
      show("-- %d" % (cnt))

    row = makerow()

    for col in row:
      if col == "nimi":
        row["nimi"] = getnimi(i,"fi")
        row["nimi_sv"] = getnimi(i,"sv")
        row["nimi_en"] = getnimi(i,"en")
      else:
        row[col] = None if col not in i else i[col]
      if type(row[col]) is list:
        row[col] = ''.join(map(str,json.dumps(row[col])))

    if verbose: show("%d -- %s"%(cnt,row["oid"]))
    if debug: print row
    dboperator.insert(hostname+url,schema,table,row,debug)

  if verbose: show("ready")
Ejemplo n.º 11
0
def load(secure,
         hostname,
         url,
         schema,
         table,
         codeset,
         verbose=False,
         debug=False):
    if verbose: print(strftime("%Y-%m-%d %H:%M:%S", localtime()) + " begin")

    row = makerow()
    dboperator.columns(row, debug)

    if verbose:
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) + " empty %s.%s" %
            (schema, table))
    dboperator.empty(schema, table, debug)

    url = url % codeset  # korvaa placeholder
    if secure:
        httpconn = httplib.HTTPSConnection(hostname)
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) +
            " load securely from " + hostname + url)
    else:
        httpconn = httplib.HTTPConnection(hostname)
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) + " load from " +
            hostname + url)

    reqheaders = {'Caller-Id': '1.2.246.562.10.2013112012294919827487.vipunen'}
    httpconn.request('GET', url, headers=reqheaders)
    #httpconn.request('GET', url)
    r = httpconn.getresponse()
    j = json.loads(r.read())
    cnt = 0
    for i in j:
        cnt += 1
        row = makerow()

        row["koodi"] = i["koodiArvo"]
        row["nimi"] = getnimi(i, "FI")
        row["nimi_sv"] = getnimi(i, "SV")
        row["nimi_en"] = getnimi(i, "EN")
        row["alkupvm"] = i["voimassaAlkuPvm"]
        row["loppupvm"] = i["voimassaLoppuPvm"]

        httpconn.request(
            'GET',
            "/koodisto-service/rest/json/relaatio/sisaltyy-alakoodit/%s" %
            i["koodiUri"],
            headers=reqheaders)
        rr = httpconn.getresponse()
        jj = json.loads(rr.read())
        for ii in jj:
            if ii["koodisto"]["koodistoUri"] == "koulutusasteoph2002":
                row["koulutusaste2002koodi"] = ii["koodiArvo"]
                row["koulutusaste2002nimi"] = getnimi(ii, "FI")
                row["koulutusaste2002nimi_sv"] = getnimi(ii, "SV")
                row["koulutusaste2002nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "koulutusalaoph2002":
                row["koulutusala2002koodi"] = ii["koodiArvo"]
                row["koulutusala2002nimi"] = getnimi(ii, "FI")
                row["koulutusala2002nimi_sv"] = getnimi(ii, "SV")
                row["koulutusala2002nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "opintoalaoph2002":
                row["opintoala2002koodi"] = ii["koodiArvo"]
                row["opintoala2002nimi"] = getnimi(ii, "FI")
                row["opintoala2002nimi_sv"] = getnimi(ii, "SV")
                row["opintoala2002nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "koulutusasteoph1995":
                row["koulutusaste1995koodi"] = ii["koodiArvo"]
                row["koulutusaste1995nimi"] = getnimi(ii, "FI")
                row["koulutusaste1995nimi_sv"] = getnimi(ii, "SV")
                row["koulutusaste1995nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "koulutusalaoph1995":
                row["koulutusala1995koodi"] = ii["koodiArvo"]
                row["koulutusala1995nimi"] = getnimi(ii, "FI")
                row["koulutusala1995nimi_sv"] = getnimi(ii, "SV")
                row["koulutusala1995nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "opintoalaoph1995":
                row["opintoala1995koodi"] = ii["koodiArvo"]
                row["opintoala1995nimi"] = getnimi(ii, "FI")
                row["opintoala1995nimi_sv"] = getnimi(ii, "SV")
                row["opintoala1995nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "tutkinto":
                row["tutkintokoodi"] = ii["koodiArvo"]
                row["tutkintonimi"] = getnimi(ii, "FI")
                row["tutkintonimi_sv"] = getnimi(ii, "SV")
                row["tutkintonimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "tutkintotyyppi":
                row["tutkintotyyppikoodi"] = ii["koodiArvo"]
                row["tutkintotyyppinimi"] = getnimi(ii, "FI")
                row["tutkintotyyppinimi_sv"] = getnimi(ii, "SV")
                row["tutkintotyyppinimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "koulutustyyppi":
                row["koulutustyyppikoodi"] = ii["koodiArvo"]
                row["koulutustyyppinimi"] = getnimi(ii, "FI")
                row["koulutustyyppinimi_sv"] = getnimi(ii, "SV")
                row["koulutustyyppinimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusaste":
                row["isced2011koulutusastekoodi"] = ii["koodiArvo"]
                row["isced2011koulutusastenimi"] = getnimi(ii, "FI")
                row["isced2011koulutusastenimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusastenimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusastetaso1":
                row["isced2011koulutusastetaso1koodi"] = ii["koodiArvo"]
                row["isced2011koulutusastetaso1nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusastetaso1nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusastetaso1nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusastetaso2":
                row["isced2011koulutusastetaso2koodi"] = ii["koodiArvo"]
                row["isced2011koulutusastetaso2nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusastetaso2nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusastetaso2nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"][
                    "koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusastetaso1":
                row["koulutusluokitus2016koulutusastetaso1koodi"] = ii[
                    "koodiArvo"]
                row["koulutusluokitus2016koulutusastetaso1nimi"] = getnimi(
                    ii, "FI")
                row["koulutusluokitus2016koulutusastetaso1nimi_sv"] = getnimi(
                    ii, "SV")
                row["koulutusluokitus2016koulutusastetaso1nimi_en"] = getnimi(
                    ii, "EN")
            # huom! https://www.stat.fi/meta/luokitukset/koulutus/001-2016/kuvaus.html
            # kansallinenkoulutusluokitus2016koulutusastetaso2 -> isced2011koulutusastetaso2
            if ii["koodisto"][
                    "koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusastetaso2":
                row["koulutusluokitus2016koulutusastetaso2koodi"] = ii[
                    "koodiArvo"]
                row["koulutusluokitus2016koulutusastetaso2nimi"] = getnimi(
                    ii, "FI")
                row["koulutusluokitus2016koulutusastetaso2nimi_sv"] = getnimi(
                    ii, "SV")
                row["koulutusluokitus2016koulutusastetaso2nimi_en"] = getnimi(
                    ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso1":
                row["isced2011koulutusalataso1koodi"] = ii["koodiArvo"]
                row["isced2011koulutusalataso1nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusalataso1nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusalataso1nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"][
                    "koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusalataso1":
                row["koulutusluokitus2016koulutusalataso1koodi"] = ii[
                    "koodiArvo"]
                row["koulutusluokitus2016koulutusalataso1nimi"] = getnimi(
                    ii, "FI")
                row["koulutusluokitus2016koulutusalataso1nimi_sv"] = getnimi(
                    ii, "SV")
                row["koulutusluokitus2016koulutusalataso1nimi_en"] = getnimi(
                    ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso2":
                row["isced2011koulutusalataso2koodi"] = ii["koodiArvo"]
                row["isced2011koulutusalataso2nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusalataso2nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusalataso2nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"][
                    "koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusalataso2":
                row["koulutusluokitus2016koulutusalataso2koodi"] = ii[
                    "koodiArvo"]
                row["koulutusluokitus2016koulutusalataso2nimi"] = getnimi(
                    ii, "FI")
                row["koulutusluokitus2016koulutusalataso2nimi_sv"] = getnimi(
                    ii, "SV")
                row["koulutusluokitus2016koulutusalataso2nimi_en"] = getnimi(
                    ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso3":
                row["isced2011koulutusalataso3koodi"] = ii["koodiArvo"]
                row["isced2011koulutusalataso3nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusalataso3nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusalataso3nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"][
                    "koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusalataso3":
                row["koulutusluokitus2016koulutusalataso3koodi"] = ii[
                    "koodiArvo"]
                row["koulutusluokitus2016koulutusalataso3nimi"] = getnimi(
                    ii, "FI")
                row["koulutusluokitus2016koulutusalataso3nimi_sv"] = getnimi(
                    ii, "SV")
                row["koulutusluokitus2016koulutusalataso3nimi_en"] = getnimi(
                    ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "okmohjauksenala":
                row["okmohjauksenalakoodi"] = ii["koodiArvo"]
                row["okmohjauksenalanimi"] = getnimi(ii, "FI")
                row["okmohjauksenalanimi_sv"] = getnimi(ii, "SV")
                row["okmohjauksenalanimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "tutkintonimikkeet":
                row["tutkintonimikekoodi"] = ii["koodiArvo"]
                row["tutkintonimike"] = getnimi(ii, "FI")
                row["tutkintonimike_sv"] = getnimi(ii, "SV")
                row["tutkintonimike_en"] = getnimi(ii, "EN")

        if verbose:
            print(
                strftime("%Y-%m-%d %H:%M:%S", localtime()) + " %d -- %s" %
                (cnt, row["koodi"]))
        dboperator.insert(hostname + url, schema, table, row, debug)

    dboperator.close(debug)

    if verbose: print(strftime("%Y-%m-%d %H:%M:%S", localtime()) + " ready")
def load(secure,hostname,url,schema,table,codeset,verbose=False,debug=False):
  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" begin"

  row = makerow()
  dboperator.columns(row,debug)

  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" empty %s.%s"%(schema,table)
  dboperator.empty(schema,table,debug)

  url = url % codeset # replace placeholder
  if secure:
    httpconn = httplib.HTTPSConnection(hostname)
    print strftime("%Y-%m-%d %H:%M:%S", localtime())+" load securely from "+hostname+url
  else:
    httpconn = httplib.HTTPConnection(hostname)
    print strftime("%Y-%m-%d %H:%M:%S", localtime())+" load from "+hostname+url

  httpconn.request('GET', url)
  r = httpconn.getresponse()
  j = json.loads(r.read())
  cnt = 0
  for i in j:
    cnt += 1
    row = makerow()

    row["koodi"] = jv(i,"koodiArvo")
    row["nimi"] = getnimi(i,"FI")
    row["nimi_sv"] = getnimi(i,"SV")
    row["nimi_en"] = getnimi(i,"FI")
    row["alkupvm"] = jv(i,"voimassaAlkuPvm")
    row["loppupvm"] = jv(i,"voimassaLoppuPvm")

    # classifications (nb! avi is in different direction!)
    httpconn.request('GET', "/koodisto-service/rest/json/relaatio/sisaltyy-ylakoodit/%s" % i["koodiUri"])
    rr = httpconn.getresponse()
    jj = json.loads(rr.read())
    ss = ""
    for ii in jj:
      if ii["koodisto"]["koodistoUri"] == "aluehallintovirasto":
        row["avikoodi"] = jv(ii,"koodiArvo")
        row["avinimi"] = getnimi(ii,"FI")
        row["avinimi_sv"] = getnimi(ii,"SV")
        row["avinimi_en"] = getnimi(ii,"EN")
    # other classifications
    httpconn.request('GET', "/koodisto-service/rest/json/relaatio/sisaltyy-alakoodit/%s" % i["koodiUri"])
    rr = httpconn.getresponse()
    jj = json.loads(rr.read())
    ss = ""
    for ii in jj:
      if ii["koodisto"]["koodistoUri"] == "maakunta":
        row["maakuntakoodi"] = jv(ii,"koodiArvo")
        row["maakuntanimi"] = getnimi(ii,"FI")
        row["maakuntanimi_sv"] = getnimi(ii,"SV")
        row["maakuntanimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "elykeskus":
        row["elykoodi"] = jv(ii,"koodiArvo")
        row["elynimi"] = getnimi(ii,"FI")
        row["elynimi_sv"] = getnimi(ii,"SV")
        row["elynimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "kielisuhde":
        row["kielisuhdekoodi"] = jv(ii,"koodiArvo")
        row["kielisuhdenimi"] = getnimi(ii,"FI")
        row["kielisuhdenimi_sv"] = getnimi(ii,"SV")
        row["kielisuhdenimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "seutukunta":
        row["seutukuntakoodi"] = jv(ii,"koodiArvo")
        row["seutukuntanimi"] = getnimi(ii,"FI")
        row["seutukuntanimi_sv"] = getnimi(ii,"SV")
        row["seutukuntanimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "laani":
        row["laanikoodi"] = jv(ii,"koodiArvo")
        row["laaninimi"] = getnimi(ii,"FI")
        row["laaninimi_sv"] = getnimi(ii,"SV")
        row["laaninimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "kuntaryhma":
        row["kuntaryhmakoodi"] = jv(ii,"koodiArvo")
        row["kuntaryhmanimi"] = getnimi(ii,"FI")
        row["kuntaryhmanimi_sv"] = getnimi(ii,"SV")
        row["kuntaryhmanimi_en"] = getnimi(ii,"EN")

    if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" %d -- %s"%(cnt,row["koodi"])
    dboperator.insert(hostname+url,schema,table,row,debug)

  dboperator.close(debug)

  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" ready"
def load(secure,hostname,url,schema,table,verbose=False):
  if verbose: show("begin")

  # make "columnlist" (type has no meaning as we're not creating table)
  row = makerow()
  # setup dboperator so other calls work
  dboperator.columns(row)

  if verbose: show("empty %s.%s"%(schema,table))
  dboperator.empty(schema,table)

  # fetching could be as simple and fast as:
  """
  geturi = "v2/hae?aktiiviset=true&suunnitellut=true&lakkautetut=true&organisaatiotyyppi="
  tyyppis = [
    "Koulutustoimija",
    "Oppilaitos",
    "Toimipiste"
  ]
  cnt = 0
  for tyyppi in tyyppis:
    show("load from "+hostname+url+geturi+tyyppi)

    if secure:
      address = "https://"+hostname+url+geturi+tyyppi
    else:
      address = "http://"+hostname+url+geturi+tyyppi
  """
  # ... but results don't contain address information :(

  if secure:
    address = "https://"+hostname+url
  else:
    address = "http://"+hostname+url

  #""" load from web
  show("load from "+address)

  try:
    # first create a "hash map" of liitokset
    liitosresponse = requests.get(address+"v2/liitokset")
    # actual data
    response = requests.get(address)
  except e:
    show('HTTP GET failed.')
    show('Reason: %s'%(e.reason))
    sys.exit(2)
  else:
    # everything is fine
    show("api call OK")
  #"""

  # liitokset
  liitosmap = dict()
  for l in liitosresponse.json():
    liitosmap[l["organisaatio"]["oid"]] = l["kohde"]["oid"]
  liitosresponse = None

  oids = response.json()
  cnt = 0
  for o in oids:
    cnt+=1
    # show some sign of being alive
    if cnt%100 == 0:
      sys.stdout.write('.')
      sys.stdout.flush()
    if cnt%1000 == 0:
      show("-- %d" % (cnt))
    if verbose: show("%d -- %s"%(cnt,row))

    # make another requets to actual organization data
    try:
        r = requests.get(address+o)
        i = r.json()

        # make "row" (clear values)
        row = makerow()

        row["oid"] = o
        row["parentoid"] = jv(i,"parentOid")
        # liitokset
        row["liitosoid"] = liitosmap[o] if o in liitosmap else None

        # TODO does the order here matter? if multiple tyyppi's, what to do?
        if "tyypit" in i and "Koulutustoimija" in i["tyypit"]:
          row["tyyppi"] = "Koulutustoimija"
          row["koodi"] = jv(i,"ytunnus")
          if not row["koodi"]:
            row["koodi"] = jv(i,"virastotunnus") # alternatively try virastotunnus if ytunnus is missing
          if not row["koodi"]:
            row["tyyppi"] = None # cancel this organization from loading
        elif "tyypit" in i and "Oppilaitos" in i["tyypit"]:
          row["tyyppi"] = "Oppilaitos"
          row["koodi"] = jv(i,"oppilaitosKoodi")
          if "oppilaitosTyyppiUri" in i and i["oppilaitosTyyppiUri"]:
            row["oppilaitostyyppi"] = i["oppilaitosTyyppiUri"].replace("oppilaitostyyppi_","").replace("#1","")
            # => just code, text values separately
        elif "tyypit" in i and "Toimipiste" in i["tyypit"]:
          row["tyyppi"] = "Toimipiste"
          row["koodi"] = jv(i,"toimipistekoodi")
        elif "tyypit" in i and "Oppisopimustoimipiste" in i["tyypit"]:
          row["tyyppi"] = "Oppisopimustoimipiste"
          row["koodi"] = jv(i,"toimipistekoodi")

        # was current organization of type of interest
        if row["tyyppi"]:

          if "nimi" in i and i["nimi"]:
            row["nimi"] = jv(jv(i,"nimi"),"fi")
            row["nimi_sv"] = jv(jv(i,"nimi"),"sv")
            row["nimi_en"] = jv(jv(i,"nimi"),"en")
          row["alkupvm"] = jv(i,"alkuPvm")
          row["loppupvm"] = jv(i,"lakkautusPvm")

          if "kotipaikkaUri" in i and i["kotipaikkaUri"]:
            row["kotikunta"] = jv(i,"kotipaikkaUri").replace("kunta_","")
            # => just code, text values separately

          if "kieletUris" in i and i["kieletUris"]:
            # todo what if many?
            row["oppilaitoksenopetuskieli"] = i["kieletUris"][0].replace("oppilaitoksenopetuskieli_","").replace("#1","")
            # => just code, text values separately

          # address, first kayntiosoite and if not exists then postiosoite
          josoite = None
          if "kayntiosoite" in i:
            josoite = jv(i,"kayntiosoite")
            row["osoitetyyppi"] = "kayntiosoite"
          elif "postiosoite" in i:
            josoite = jv(i,"postiosoite")
            row["osoitetyyppi"] = "postiosoite"
          if josoite:
            row["osoite"] = jv(josoite,"osoite")
            row["postinumero"] = josoite["postinumeroUri"].replace("posti_","") if "postinumeroUri" in josoite and josoite["postinumeroUri"] else None
            row["postitoimipaikka"] = jv(josoite,"postitoimipaikka")

            if (row["osoite"] is not None and row["osoite"] is not "" and row["postinumero"] is not None and row["postinumero"] is not ""
                and int(row["postinumero"]) is not 0 and row["postitoimipaikka"] is not None and row["postitoimipaikka"] is not ""):
              get_and_set_coordinates(row)

          if verbose: show(" %5d -- %s %s (%s)"%(cnt,row["tyyppi"],row["koodi"],row["nimi"]))
          dboperator.insert(hostname+url,schema,table,row)
    except ValueError, ve:
        print "Error: " + str(ve)
        print "vika: " + str(address) + " oid:" + str(o)
Ejemplo n.º 14
0
        if cnt % 100 == 0:
            sys.stdout.write('.')
            sys.stdout.flush()
        if cnt % 1000 == 0:
            show("-- %d" % (cnt))
        if verbose: show("%d -- %s" % (cnt, row))

        # find out which columns to use on insert
        dboperator.resetcolumns(row)

        # flatten arrays/lists
        for col in row:
            if type(row[col]) is list:
                row[col] = ''.join(map(str, json.dumps(row[col])))

        dboperator.insert(address, schema, table, row)

    show("wrote %d" % (cnt))
    show("ready")


def usage():
    print """
usage: load.py [-s|--secure] -H|--hostname <hostname> -u|--url <url> -e|--schema <schema> -t|--table <table> [-p|--postdata] [-c|--condition <condition>] [-v|--verbose]
"""


def main(argv):
    # muuttujat jotka kerrotaan argumentein
    secure = False
    hostname, url, schema, table = "", "", "", ""
Ejemplo n.º 15
0
def load(secure,
         hostname,
         url,
         schema,
         table,
         codeset,
         verbose=False,
         debug=False):
    if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime()) + " begin"

    row = makerow()
    dboperator.columns(row, debug)

    if verbose:
        print strftime("%Y-%m-%d %H:%M:%S",
                       localtime()) + " empty %s.%s" % (schema, table)
    dboperator.empty(schema, table, debug)

    url = url % codeset  # korvaa placeholder
    if secure:
        httpconn = httplib.HTTPSConnection(hostname)
        print strftime("%Y-%m-%d %H:%M:%S",
                       localtime()) + " load securely from " + hostname + url
    else:
        httpconn = httplib.HTTPConnection(hostname)
        print strftime("%Y-%m-%d %H:%M:%S",
                       localtime()) + " load from " + hostname + url

    httpconn.request('GET', url)
    r = httpconn.getresponse()
    j = json.loads(r.read())
    cnt = 0
    for i in j:
        cnt += 1
        row = makerow()

        row["koodi"] = i["koodiArvo"]
        row["nimi"] = getnimi(i, "FI")
        row["nimi_sv"] = getnimi(i, "SV")
        row["nimi_en"] = getnimi(i, "FI")
        row["alkupvm"] = i["voimassaAlkuPvm"]
        row["loppupvm"] = i["voimassaLoppuPvm"]

        httpconn.request(
            'GET',
            "/koodisto-service/rest/json/relaatio/sisaltyy-alakoodit/%s" %
            i["koodiUri"])
        rr = httpconn.getresponse()
        jj = json.loads(rr.read())
        ss = ""
        for ii in jj:
            if ii["koodisto"]["koodistoUri"] == "koulutusasteoph2002":
                row["koulutusaste2002koodi"] = ii["koodiArvo"]
                row["koulutusaste2002nimi"] = getnimi(ii, "FI")
                row["koulutusaste2002nimi_sv"] = getnimi(ii, "SV")
                row["koulutusaste2002nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "koulutusalaoph2002":
                row["koulutusala2002koodi"] = ii["koodiArvo"]
                row["koulutusala2002nimi"] = getnimi(ii, "FI")
                row["koulutusala2002nimi_sv"] = getnimi(ii, "SV")
                row["koulutusala2002nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "opintoalaoph2002":
                row["opintoala2002koodi"] = ii["koodiArvo"]
                row["opintoala2002nimi"] = getnimi(ii, "FI")
                row["opintoala2002nimi_sv"] = getnimi(ii, "SV")
                row["opintoala2002nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "koulutusasteoph1995":
                row["koulutusaste1995koodi"] = ii["koodiArvo"]
                row["koulutusaste1995nimi"] = getnimi(ii, "FI")
                row["koulutusaste1995nimi_sv"] = getnimi(ii, "SV")
                row["koulutusaste1995nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "koulutusalaoph1995":
                row["koulutusala1995koodi"] = ii["koodiArvo"]
                row["koulutusala1995nimi"] = getnimi(ii, "FI")
                row["koulutusala1995nimi_sv"] = getnimi(ii, "SV")
                row["koulutusala1995nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "opintoalaoph1995":
                row["opintoala1995koodi"] = ii["koodiArvo"]
                row["opintoala1995nimi"] = getnimi(ii, "FI")
                row["opintoala1995nimi_sv"] = getnimi(ii, "SV")
                row["opintoala1995nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "tutkinto":
                row["tutkintokoodi"] = ii["koodiArvo"]
                row["tutkintonimi"] = getnimi(ii, "FI")
                row["tutkintonimi_sv"] = getnimi(ii, "SV")
                row["tutkintonimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "tutkintotyyppi":
                row["tutkintotyyppikoodi"] = ii["koodiArvo"]
                row["tutkintotyyppinimi"] = getnimi(ii, "FI")
                row["tutkintotyyppinimi_sv"] = getnimi(ii, "SV")
                row["tutkintotyyppinimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "koulutustyyppi":
                row["koulutustyyppikoodi"] = ii["koodiArvo"]
                row["koulutustyyppinimi"] = getnimi(ii, "FI")
                row["koulutustyyppinimi_sv"] = getnimi(ii, "SV")
                row["koulutustyyppinimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusaste":
                row["isced2011koulutusastekoodi"] = ii["koodiArvo"]
                row["isced2011koulutusastenimi"] = getnimi(ii, "FI")
                row["isced2011koulutusastenimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusastenimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusastetaso1":
                row["isced2011koulutusastetaso1koodi"] = ii["koodiArvo"]
                row["isced2011koulutusastetaso1nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusastetaso1nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusastetaso1nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusastetaso2":
                row["isced2011koulutusastetaso2koodi"] = ii["koodiArvo"]
                row["isced2011koulutusastetaso2nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusastetaso2nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusastetaso2nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso1":
                row["isced2011koulutusalataso1koodi"] = ii["koodiArvo"]
                row["isced2011koulutusalataso1nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusalataso1nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusalataso1nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso2":
                row["isced2011koulutusalataso2koodi"] = ii["koodiArvo"]
                row["isced2011koulutusalataso2nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusalataso2nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusalataso2nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso3":
                row["isced2011koulutusalataso3koodi"] = ii["koodiArvo"]
                row["isced2011koulutusalataso3nimi"] = getnimi(ii, "FI")
                row["isced2011koulutusalataso3nimi_sv"] = getnimi(ii, "SV")
                row["isced2011koulutusalataso3nimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "okmohjauksenala":
                row["okmohjauksenalakoodi"] = ii["koodiArvo"]
                row["okmohjauksenalanimi"] = getnimi(ii, "FI")
                row["okmohjauksenalanimi_sv"] = getnimi(ii, "SV")
                row["okmohjauksenalanimi_en"] = getnimi(ii, "EN")

        if verbose:
            print strftime("%Y-%m-%d %H:%M:%S",
                           localtime()) + " %d -- %s" % (cnt, row["koodi"])
        dboperator.insert(hostname + url, schema, table, row, debug)

    dboperator.close(debug)

    if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime()) + " ready"
Ejemplo n.º 16
0
def load(secure, hostname, url, schema, table, verbose=False):
    if verbose: show("begin")

    # make "columnlist" (type has no meaning as we're not creating table)
    row = makerow()
    # setup dboperator so other calls work
    dboperator.columns(row)

    if verbose: show("empty %s.%s" % (schema, table))
    dboperator.empty(schema, table)

    # fetching could be as simple and fast as:
    """
  geturi = "v2/hae?aktiiviset=true&suunnitellut=true&lakkautetut=true&organisaatiotyyppi="
  tyyppis = [
    "Koulutustoimija",
    "Oppilaitos",
    "Toimipiste"
  ]
  cnt = 0
  for tyyppi in tyyppis:
    show("load from "+hostname+url+geturi+tyyppi)

    if secure:
      address = "https://"+hostname+url+geturi+tyyppi
    else:
      address = "http://"+hostname+url+geturi+tyyppi
  """
    # ... but results don't contain address information :(

    if secure:
        address = "https://" + hostname + url
    else:
        address = "http://" + hostname + url

    #""" load from web
    show("load from " + address)

    try:
        # first create a "hash map" of liitokset
        liitosresponse = requests.get(
            address + "v2/liitokset",
            headers={
                'Caller-Id': '1.2.246.562.10.2013112012294919827487.vipunen'
            })
        # actual data
        response = requests.get(
            address,
            headers={
                'Caller-Id': '1.2.246.562.10.2013112012294919827487.vipunen'
            })
    except Exception as e:
        show('HTTP GET failed.')
        show('Reason: %s' % (str(e)))
        sys.exit(2)
    else:
        # everything is fine
        show("api call OK")
    #"""

    # liitokset
    liitosmap = dict()
    for l in liitosresponse.json():
        liitosmap[l["organisaatio"]["oid"]] = l["kohde"]["oid"]
    liitosresponse = None

    oids = response.json()
    cnt = 0
    for o in oids:
        cnt += 1
        # show some sign of being alive
        if cnt % 100 == 0:
            sys.stdout.write('.')
            sys.stdout.flush()
        if cnt % 1000 == 0:
            show("-- %d" % (cnt))
        if verbose: show("%d -- %s" % (cnt, row))

        # make another requets to actual organization data
        try:
            r = requests.get(
                address + o,
                headers={
                    'Caller-Id':
                    '1.2.246.562.10.2013112012294919827487.vipunen'
                })
            i = r.json()

            # make "row" (clear values)
            row = makerow()

            row["oid"] = o
            row["parentoid"] = jv(i, "parentOid")
            # liitokset
            row["liitosoid"] = liitosmap[o] if o in liitosmap else None

            # TODO does the order here matter? if multiple tyyppi's, what to do?
            if "tyypit" in i and "Koulutustoimija" in i["tyypit"]:
                row["tyyppi"] = "Koulutustoimija"
                row["koodi"] = jv(i, "ytunnus")
                if not row["koodi"]:
                    row["koodi"] = jv(
                        i, "virastoTunnus"
                    )  # alternatively try virastotunnus if ytunnus is missing
                if not row["koodi"]:
                    row["tyyppi"] = None  # cancel this organization from loading
            elif "tyypit" in i and "Oppilaitos" in i["tyypit"]:
                row["tyyppi"] = "Oppilaitos"
                row["koodi"] = jv(i, "oppilaitosKoodi")
                if "oppilaitosTyyppiUri" in i and i["oppilaitosTyyppiUri"]:
                    row["oppilaitostyyppi"] = i["oppilaitosTyyppiUri"].replace(
                        "oppilaitostyyppi_", "").replace("#1", "")
                    # => just code, text values separately
            elif "tyypit" in i and "Toimipiste" in i["tyypit"]:
                row["tyyppi"] = "Toimipiste"
                row["koodi"] = jv(i, "toimipistekoodi")
            elif "tyypit" in i and "Oppisopimustoimipiste" in i["tyypit"]:
                row["tyyppi"] = "Oppisopimustoimipiste"
                row["koodi"] = jv(i, "toimipistekoodi")
            elif "tyypit" in i and "Varhaiskasvatuksen toimipaikka" in i[
                    "tyypit"]:
                row["tyyppi"] = "Varhaiskasvatuksen toimipaikka"
                row["koodi"] = jv(i, "toimipistekoodi")
            elif "tyypit" in i and "Varhaiskasvatuksen jarjestaja" in i[
                    "tyypit"]:
                row["tyyppi"] = "Varhaiskasvatuksen järjestaja"
                row["koodi"] = jv(i, "toimipistekoodi")
            # was current organization of type of interest
            if row["tyyppi"]:

                if "nimi" in i and i["nimi"]:
                    row["nimi"] = jv(jv(i, "nimi"), "fi")
                    row["nimi_sv"] = jv(jv(i, "nimi"), "sv")
                    row["nimi_en"] = jv(jv(i, "nimi"), "en")
                row["alkupvm"] = jv(i, "alkuPvm")
                row["loppupvm"] = jv(i, "lakkautusPvm")

                if "kotipaikkaUri" in i and i["kotipaikkaUri"]:
                    row["kotikunta"] = jv(i, "kotipaikkaUri").replace(
                        "kunta_", "")
                    # => just code, text values separately

                if "kieletUris" in i and i["kieletUris"]:
                    # todo what if many?
                    row["oppilaitoksenopetuskieli"] = i["kieletUris"][
                        0].replace("oppilaitoksenopetuskieli_",
                                   "").replace("#1", "")
                    # => just code, text values separately

                # address, first kayntiosoite and if not exists then postiosoite
                josoite = None
                if "kayntiosoite" in i:
                    josoite = jv(i, "kayntiosoite")
                    row["osoitetyyppi"] = "kayntiosoite"
                elif "postiosoite" in i:
                    josoite = jv(i, "postiosoite")
                    row["osoitetyyppi"] = "postiosoite"
                if josoite:
                    row["osoite"] = jv(josoite, "osoite")
                    row["postinumero"] = josoite["postinumeroUri"].replace(
                        "posti_",
                        "") if "postinumeroUri" in josoite and josoite[
                            "postinumeroUri"] else None
                    row["postitoimipaikka"] = jv(josoite, "postitoimipaikka")

                    if (row["osoite"] is not None and row["osoite"] is not ""
                            and row["postinumero"] is not None
                            and row["postinumero"] is not ""
                            and int(row["postinumero"]) is not 0
                            and row["postitoimipaikka"] is not None
                            and row["postitoimipaikka"] is not ""):
                        get_and_set_coordinates(row)

                if verbose:
                    show(" %5d -- %s %s (%s)" %
                         (cnt, row["tyyppi"], row["koodi"], row["nimi"]))
                dboperator.insert(hostname + url, schema, table, row)
        except ValueError as ve:
            print("ValueError: " + str(ve))
            print("vika: " + str(address) + " oid:" + str(o))

    dboperator.close()

    if verbose: show("ready")
Ejemplo n.º 17
0
def load(secure,
         hostname,
         url,
         schema,
         table,
         codeset,
         verbose=False,
         debug=False):
    if verbose: print(strftime("%Y-%m-%d %H:%M:%S", localtime()) + " begin")

    # make "columnlist" (type has no meaning as we're not creating table)
    row = makerow()
    # setup dboperator so other calls work
    dboperator.columns(row, debug)

    if verbose:
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) + " empty %s.%s" %
            (schema, table))
    dboperator.empty(schema, table, debug)

    reqheaders = {'Content-Type': 'application/json'}
    reqheaders['Caller-Id'] = '1.2.246.562.10.2013112012294919827487.vipunen'

    url = ""  # replace with hardcoded values below
    if secure:
        httpconn = httplib.HTTPSConnection(hostname)
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) +
            " load securely from " + hostname + url)
    else:
        httpconn = httplib.HTTPConnection(hostname)
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) + " load from " +
            hostname + url)

    links = [
        "/organisaatio-service/rest/organisaatio/v2/hierarkia/hae?organisaatiotyyppi=Koulutustoimija&aktiiviset=true&suunnitellut=true&lakkautetut=false",
        "/organisaatio-service/rest/organisaatio/v2/hierarkia/hae?organisaatiotyyppi=Koulutustoimija&aktiiviset=false&suunnitellut=false&lakkautetut=true"
    ]
    for url in links:
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) + " load from " +
            hostname + url)
        httpconn.request('GET', url, headers=reqheaders)
        #httpconn.request('GET', url)
        r = httpconn.getresponse()
        j = json.loads(r.read())
        cnt = 0
        for i in j["organisaatiot"]:
            # make "row" (clear values)
            row = makerow()

            row["jarjestajaoid"] = i["oid"]
            row["jarjestajakoodi"] = None if "ytunnus" not in i else i[
                "ytunnus"]  # may be None
            row["jarjestajanimi"] = None if "fi" not in i["nimi"] else i[
                "nimi"]["fi"]
            row["jarjestajanimi_sv"] = None if "sv" not in i["nimi"] else i[
                "nimi"]["sv"]
            row["jarjestajanimi_en"] = None if "en" not in i["nimi"] else i[
                "nimi"]["en"]

            for o in i["children"]:
                if "oppilaitosKoodi" in o:
                    cnt += 1
                    # sarakkeet
                    row["oid"] = o["oid"]
                    row["koodi"] = o["oppilaitosKoodi"]
                    row["nimi"] = None if "fi" not in o["nimi"] else o["nimi"][
                        "fi"]
                    row["nimi_sv"] = None if "sv" not in o["nimi"] else o[
                        "nimi"]["sv"]
                    row["nimi_en"] = None if "en" not in o["nimi"] else o[
                        "nimi"]["en"]
                    row["alkupvm"] = "1900-1-1" if "alkuPvm" not in o or o[
                        "alkuPvm"] < 0 else strftime(
                            "%Y-%m-%d", localtime(o["alkuPvm"] / 1000))
                    row["loppupvm"] = None if "lakkautusPvm" not in o else strftime(
                        "%Y-%m-%d", localtime(o["lakkautusPvm"] / 1000))

                    row["kuntakoodi"] = o["kotipaikkaUri"].replace(
                        "kunta_", "")
                    # => text values separately
                    row["oppilaitostyyppikoodi"] = o[
                        "oppilaitostyyppi"].replace("oppilaitostyyppi_",
                                                    "").replace("#1", "")
                    # => text values separately

                    # get address

                    #httpconn.request('GET', "/organisaatio-service/rest/organisaatio/"+row["oid"]reqheaders)
                    httpconn.request(
                        'GET',
                        "/organisaatio-service/rest/organisaatio/" +
                        row["oid"],
                        headers=reqheaders)
                    rr = httpconn.getresponse()
                    jj = json.loads(rr.read())
                    if jj["kayntiosoite"]:
                        row["osoite"] = jj["kayntiosoite"]["osoite"]
                        row["postinumero"] = None if "postinumeroUri" not in jj[
                            "kayntiosoite"] else jj["kayntiosoite"][
                                "postinumeroUri"].replace("posti_", "")
                        if "postitoimipaikka" in jj["kayntiosoite"]:
                            row["postitoimipaikka"] = jj["kayntiosoite"][
                                "postitoimipaikka"]
                        elif "postitoimipaikka" in jj["postiosoite"]:
                            row["postitoimipaikka"] = jj["postiosoite"][
                                "postitoimipaikka"]
                        else:
                            row["postitoimipaikka"] = None

                    elif jj["postiosoite"]:
                        row["osoite"] = jj["postiosoite"]["osoite"]
                        if jj["postiosoite"]["postinumeroUri"]:
                            row["postinumero"] = jj["postiosoite"][
                                "postinumeroUri"].replace("posti_", "")
                        row["postitoimipaikka"] = jj["postiosoite"][
                            "postitoimipaikka"]

                    # todo get coordinates (see geocoding.py)

                    if verbose:
                        print(
                            strftime("%Y-%m-%d %H:%M:%S", localtime()) +
                            " %d -- %s" % (cnt, row["koodi"]))
                    dboperator.insert(hostname + url, schema, table, row,
                                      debug)

    dboperator.close(debug)

    if verbose: print(strftime("%Y-%m-%d %H:%M:%S", localtime()) + " ready")
Ejemplo n.º 18
0
def load(secure,hostname,url,schema,table,postdata,condition,verbose):
  show("begin "+hostname+" "+url+" "+schema+" "+table+" "+(postdata or "No postdata")+" "+(condition or ""))

  address = "http://"+hostname+url
  show("load from "+address)

  reqheaders = {'Content-Type': 'application/json'}
  reqheaders['Caller-Id'] = '1.2.246.562.10.2013112012294919827487.vipunen'

  # api credentials from env vars
  if os.getenv("API_USERNAME"):
    show("using authentication")
    apiuser = os.getenv("API_USERNAME")
    apipass = os.getenv("API_PASSWORD")
    reqheaders['Authorization'] = 'Basic %s' % base64.b64encode(apiuser+":"+apipass)

  # automatic POST with (post)data
  #request = urllib.request.Request(address, data=postdata, headers=reqheaders)
  #time=300
  try:
    response = requests.get(address, headers=reqheaders).json()

  except Exception as e:
    show('HTTP GET failed.')
    show('Reason: %s'%(str(e)))
    sys.exit(2)

  else:
    # everything is fine
    show("api call OK")

  # remove data conditionally, otherwise empty
  # merge operation could be considered here...
  if condition:
    show("remove from %s.%s with condition '%s'"%(schema,table,condition))
    dboperator.execute("DELETE FROM %s.%s WHERE %s"%(schema,table,condition))
  else:
    show("empty %s.%s"%(schema,table))
    dboperator.empty(schema,table)

  show("insert data")
  cnt=0

  for i in response:
    cnt+=1
    # make "columnlist" (type has no meaning as we're not creating table)
    row = makerow()
    # setup dboperator so other calls work
    dboperator.columns(row)
    row["edellinenSyysolo"] = jv(i,"edellinenSyysolo")
    row["hetu"] = jv(i,"hetu")
    row["ika"] = jv(i,"ika")
    row["kevat"] = jv(i,"kevat")
    row["loAloituspvm"] = jv(i,"loAloituspvm")
    row["olok"] = jv(i,"olok")
    row["olos"] = jv(i,"olos")
    row["ooAloituspvm"] = jv(i,"ooAloituspvm")
    row["opSummaKunOtePankista"] = jv(i,"opSummaKunOtePankista")
    row["opiskelijaavain"] = jv(i,"opiskelijaavain")
    row["opiskeluoikeusavain"] = jv(i,"opiskeluoikeusavain")
    row["opiskeluoikeusid"] = jv(i,"opiskeluoikeusid")
    row["oppilaitos"] = jv(i,"oppilaitos")
    row["oppilaitostunnus"] = jv(i,"oppilaitostunnus")
    row["pankkiKumuEnnen55"] = jv(i,"pankkiKumuEnnen55")
    row["pankkiSaldo55"] = jv(i,"pankkiSaldo55")
    row["regDatum"] = jv(i,"regDatum")
    row["sukupuoli"] = jv(i,"sukupuoli")
    row["summa"] = jv(i,"summa")
    row["suorittanut27"] = jv(i,"suorittanut27")
    row["suorittanut55ilmanPankkia"] = jv(i,"suorittanut55ilmanPankkia")
    row["suorittanut55pankinAvulla"] = jv(i,"suorittanut55pankinAvulla")
    row["syys"] = jv(i,"syys")
    row["tkoodi"] = jv(i,"tkoodi")
    row["uusiOpisk"] = jv(i,"uusiOpisk")
    row["uusiOpiskKevat"] = jv(i,"uusiOpiskKevat")
    row["uuttaPankkiin"] = jv(i,"uuttaPankkiin")
    row["vuosi"] = jv(i,"vuosi")
    dboperator.insert(hostname+url,schema,table,row)
     # show some sign of being alive
    if cnt%100 == 0:
      sys.stdout.write('.')
      sys.stdout.flush()
    if cnt%1000 == 0:
      show("-- %d" % (cnt))
    if verbose: show("%d -- %s"%(cnt,row))
  show("wrote %d"%(cnt))
  show("ready")
Ejemplo n.º 19
0
def load(url, schema, table, condition):
    """
    Results from ARVO-API can come in multiple pages. If that's the case,
    we need to make multiple requests to the ARVO API, using the "next_url" parameter.
    """

    FIRST_LOOP = True  # This is used to make possible DELETE operation (due to condition) only once.

    while True:
        show("begin " + url + " " + schema + " " + table + " " + (condition or ""))
        show("load from " + url)

        reqheaders = {'Content-Type': 'application/json'}
        # api credentials from env vars
        if os.getenv("API_USERNAME"):
            show("using authentication")
            apiuser = os.getenv("API_USERNAME")
            apipass = os.getenv("API_PASSWORD")
            reqheaders['Authorization'] = 'Basic %s' % base64.b64encode(apiuser + ":" + apipass)

        try:
            r = requests.get(url, headers=reqheaders)
        except requests.exceptions.RequestException as e:
            print e
            sys.exit(1)

        if r.status_code != 200:
            print "Error! HTTP status code: " + str(r.status_code)
            sys.exit(2)

        try:
            result = json.loads(r.content)
        except ValueError as e:
            print e
            sys.exit(3)

        if "pagination" not in result or "data" not in result:
            print "Error! Received JSON-data not valid."
            sys.exit(4)

        # everything is fine
        show("api call OK")

        """
          Received data e.g.

            {
              "data": [
                {
                  "taustakysymykset": true,
                  "koulutustoimija": "xxxx",
                  "vastausid": 1111,
                  "kyselykertaid": 123,
                  "kysely_alkupvm": "2016-11-29T22:00:00Z",
                  "suorituskieli": "fi",
                  "tutkinto_fi": "xxxx",
                  "valmistavan_koulutuksen_jarjestaja_en": "xxxx",
                  "kysymys_en": "xxxx",
                  "koulutustoimija_en": "xxxx",
                  "tutkintotunnus": "xxxx",
                  "numerovalinta": 2,
                  "valmistavan_koulutuksen_oppilaitos_sv": "xxxx",
                  "kysymys_sv": "xxxx",
                  "kysymysjarjestys": 0,
                  "monivalintavaihtoehto": "xxxx",
                  "kysymysid": 1234,
                  "valmistavan_koulutuksen_oppilaitos_fi": "xxxx",
                  "kysely_en": "xxxx",
                  "vastaustyyppi": "xxxx",
                  "kysymysryhma": "xxxx",
                  "tutkinto_en": null,
                  "kunta": null,
                  "kysymysryhmaid": 110,
                  "kysymysryhmajarjestys": 0,
                  "vaihtoehto": null,
                  "kysymys_fi": "Ik",
                  "vastaajaid": 123,
                  "kyselyid": 111,
                  "valmistavan_koulutuksen_jarjestaja_fi": "xxxx",
                  "kysymysryhma_en": "xxxx",
                  "kysely_sv": "xxxx",
                  "kysymysryhma_fi": "xxxx",
                  "valmistavan_koulutuksen_jarjestaja_sv": "xxxx",
                  "vastausaika": "2017-02-05T22:00:00Z",
                  "tunnus": "xxxx",
                  "valmistavan_koulutuksen_jarjestaja": "xxxx",
                  "koulutustoimija_fi": "xxxx",
                  "kysely_loppupvm": null,
                  "koulutusmuoto": null,
                  "kyselykerta": "xxxx",
                  "valmistavan_koulutuksen_oppilaitos_en": "xxxx",
                  "valtakunnallinen": true,
                  "tutkinto_sv": null,
                  "koulutustoimija_sv": "xxxx",
                  "valmistavan_koulutuksen_oppilaitos": "xxxx",
                  "kysely_fi": "xxxx",
                  "kysymysryhma_sv": "xxxx"
                }
              ],
              "pagination": {
                "next_url": "null"
              }
            }

        """

        address = url.split("?")[0]  # Save in DB only the part before ?-mark: https://arvo.csc.fi/api/vipunen?alkupvm=2018-01-01&loppupvm=2018-02-01

        # remove data conditionally, otherwise empty
        # merge operation could be considered here...
        if FIRST_LOOP:  # This is done only on the first go (no matter if Arvo returns one or multiple pages)
            if condition:
                show("remove from %s.%s with condition '%s'" % (schema, table, condition))
                dboperator.execute("DELETE FROM %s.%s WHERE %s" % (schema, table, condition))
            else:
                show("empty %s.%s" % (schema, table))
                dboperator.empty(schema, table)

        show("insert data")
        cnt = 0
        for row in result["data"]:
            cnt += 1
            # show some sign of being alive
            if cnt % 100 == 0:
                sys.stdout.write('.')
                sys.stdout.flush()
            if cnt % 1000 == 0:
                show("-- %d" % (cnt))

            # find out which columns to use on insert
            dboperator.resetcolumns(row)

            # flatten arrays/lists
            for col in row:
                if type(row[col]) is list:
                    row[col] = ''.join(map(str, json.dumps(row[col])))

            dboperator.insert(address, schema, table, row)

        show("wrote %d" % (cnt))
        show("ready")

        if result["pagination"]["next_url"] == "null" or result["pagination"]["next_url"] == None:
            break  # exit while-loop. We are done.
        else:
            url = result["pagination"]["next_url"]
            FIRST_LOOP = False  # Do not make the possible DELETE-operation anymore!
Ejemplo n.º 20
0
def load(url, schema, table, condition):
    """
    Results from VARDA-API can come in multiple pages. If that's the case,
    we need to make multiple requests to the VARDA API, using the "next" parameter.
    """

    # First delete all from TABLE -> Start from scratch. TODO: Delete based on condition.
    dboperator.execute("DELETE FROM %s.%s" % (schema, table))

    while True:
        show("begin " + url + " " + schema + " " + table + " " +
             (condition or ""))
        show("load from " + url)

        reqheaders = {'Content-Type': 'application/json'}
        reqheaders[
            'Caller-Id'] = '1.2.246.562.10.2013112012294919827487.vipunen'
        # api credentials from env vars
        if os.getenv("VARDA_API_KEY"):
            show("using authentication")
            api_key = os.getenv("VARDA_API_KEY")
            reqheaders['Authorization'] = 'Token %s' % api_key

        try:
            r = requests.get(url, headers=reqheaders)
        except requests.exceptions.RequestException as e:
            print("RequestException: ", e)
            sys.exit(1)

        if r.status_code != 200:
            print("Error! HTTP status code: " + str(r.status_code))
            sys.exit(2)

        try:
            data = json.loads(r.content)
        except ValueError as e:
            print("ValueError: ", e)
            sys.exit(3)

        # everything is fine
        show("api call OK")

        # Parse URL
        # From https://varda.oso-pilot.csc.fi/api/v1/toimipisteet/ save in DB https://varda.oso-pilot.csc.fi
        n = url.find("/", url.find("/") + 2)  # find 3rd occurance of "/"
        address = url[:n]

        show("insert data")
        cnt = 0
        for row in data["results"]:
            cnt += 1
            # show some sign of being alive
            if cnt % 100 == 0:
                sys.stdout.write('.')
                sys.stdout.flush()
            if cnt % 1000 == 0:
                show("-- %d" % (cnt))

            # Explicitly remove the keys from dict (row) that are not saved in Antero DB
            del row['johtaja']
            del row['url']
            del row['muutos_pvm']
            del row['vaka_jarjestaja']
            del row['toimipaikat']

            # find out which columns to use on insert
            dboperator.resetcolumns(row)

            # flatten arrays/lists
            for col in row:
                if type(row[col]) is list:
                    row[col] = ''.join(map(str, json.dumps(row[col])))

            dboperator.insert(address, schema, table, row)

        show("wrote %d" % (cnt))
        show("ready")

        if data["next"] is None:
            break  # exit while-loop. We are done.
        else:
            url = data["next"]
Ejemplo n.º 21
0
def load(secure,hostname,url,schema,table,verbose):
  show("begin "+hostname+" "+url+" "+schema+" "+table)
  if secure:
    address = "https://"+hostname+url
  else:
    address = "http://"+hostname+url
  
  #""" load from web
  show("load from "+address)
  try:
    response = requests.get(address)
  except e:
    show('HTTP GET failed.')
    show('Reason: %s'%(e.reason))
    sys.exit(2)
  else:
    # everything is fine
    show("api call OK")
  
  # read the data.
  # all of it. this is dangerous for big datasets!
  # convert to utf-8 on-the-fly if it's not
  data = response.text.encode('utf-8')
  #"""

  # create temporary file (remove at the end)
  f = tempfile.NamedTemporaryFile() #defaults: mode='w+b', delete=True)
  show("using tempfile: %s"%(f.name))
  f.write(data)
  
  # start using data, go to start
  f.seek(0)
  # remove BOM if exists
  if f.read(3)!=codecs.BOM_UTF8: f.seek(0)
  
  # make csv dictionary (first row must have column names)
  csvdata = csv.DictReader(f, delimiter=";")
  
  # discover columns and their types (read through entirely!)
  show("discover table structure")
  cnt=0
  for row in csvdata:
    cnt+=1
    if verbose: print cnt,row
    if verbose:
      for col in row:
        print cnt,col,row[col]
    dboperator.columns(row)
  
  # start operating with database
  # drop table
  show("drop %s.%s"%(schema,table))
  dboperator.drop(schema,table)

  # create table
  show("create %s.%s"%(schema,table))
  dboperator.create(schema,table)

  show("insert data")
  # reset csvdata!
  f.seek(0)
  # remove BOM
  if f.read(3)!=codecs.BOM_UTF8: f.seek(0)
  csvdata = csv.DictReader(f, delimiter=";")
  
  cnt=0
  for row in csvdata:
    cnt+=1
    # show some sign of being alive
    if cnt%100 == 0:
      sys.stdout.write('.')
      sys.stdout.flush()
    if cnt%1000 == 0:
      show("-- %d" % (cnt))
    dboperator.insert(address,schema,table,row)

  show("wrote %d"%(cnt))
  dboperator.close()
  
  # close (and delete) file
  f.close()

  show("ready")
Ejemplo n.º 22
0
def load(secure,hostname,url,schema,table,postdata,condition,verbose,rowcount):
  show("begin "+hostname+" "+url+" "+schema+" "+table+" "+(postdata or "")+" "+(condition or ""))
  if secure:
    address = "https://"+hostname+url
  else:
    address = "http://"+hostname+url
  show("load from "+address)

  reqheaders = {'Content-Type': 'application/json'}
  reqheaders['Caller-Id'] = '1.2.246.562.10.2013112012294919827487.vipunen'

  # api credentials from env vars
  if os.getenv("API_USERNAME"):
    show("using authentication")
    apiuser = os.getenv("API_USERNAME")
    apipass = os.getenv("API_PASSWORD")
    reqheaders['Authorization'] = 'Basic %s' % base64.b64encode(apiuser+":"+apipass)

  # automatic POST with (post)data
  print("value used for , -r, --rowcount=", rowcount)
  request = urllib2.Request(address, data=postdata, headers=reqheaders)
  try:
    response = urllib2.urlopen(request)
  except httplib.IncompleteRead as e:
    show('IncompleteRead exception.')
    show('Received: %d'%(e.partial))
    sys.exit(2)
  except urllib2.HTTPError as e:
    show('The server couldn\'t fulfill the request.')
    show('Error code: %d'%(e.code))
    sys.exit(2)
  except urllib2.URLError as e:
    show('We failed to reach a server.')
    show('Reason: %s'%(e.reason))
    sys.exit(2)
  else:
    # everything is fine
    show("api call OK")

  # remove data conditionally, otherwise empty
  # merge operation could be considered here...
  if condition:
    show("remove from %s.%s with condition '%s'"%(schema,table,condition))
    dboperator.execute("DELETE FROM %s.%s WHERE %s"%(schema,table,condition))
  else:
    show("empty %s.%s"%(schema,table))
    dboperator.empty(schema,table)

  show("insert data")
  cnt=0
  manycount = 0
  rows = []

  for row in ijson.items(response,'item'):
        cnt+=1
        manycount+=1
        # show some sign of being alive
        if cnt%100 == 0:
          sys.stdout.write('.')
          sys.stdout.flush()
        if cnt%1000 == 0:
          show("-- %d" % (cnt))
        if verbose: show("%d -- %s"%(cnt,row))

        # find out which columns to use on insert
        dboperator.resetcolumns(row)

        # flatten arrays/lists
        for col in row:
            if type(row[col]) is list:
                row[col] = ''.join(map(str,json.dumps(row[col])))
        rows.append(row)
        if cnt == 1:
            dboperator.insert(address,schema,table,row)
            manycount = 0
            rows = []
        if cnt > 1:
            if manycount == rowcount:
                insert(address,schema,table,rows)
                manycount = 0
                rows = []
  if len(rows) <= manycount and len(rows) > 0:
      insert(address,schema,table,rows)
      rows = []
      manycount = 0

  show("wrote %d"%(cnt))
  show("ready")
def load(hostname, url, schema, table, verbose=False, debug=False):
    if verbose: show("begin")

    row = makerow()
    dboperator.columns(row, debug)

    if verbose: show("empty %s.%s" % (schema, table))
    dboperator.empty(schema, table, debug)

    httpconn = httplib.HTTPSConnection(hostname)
    show("load securely from " + hostname + url)

    # get list of oids
    httpconn.request('GET', url)
    rr = httpconn.getresponse()
    jj = json.loads(rr.read())
    cnt = 0
    for iii in jj["result"]["tulokset"]:
        #NB! iii["oid"] on organisaation oid! talteen?
        for ii in iii["tulokset"]:
            cnt += 1
            # show some sign of being alive
            if cnt % 100 == 0:
                sys.stdout.write('.')
                sys.stdout.flush()
            if cnt % 1000 == 0:
                show("-- %d" % (cnt))

            # get one koulutus. skip koodisto meta etc
            url = "/tarjonta-service/rest/v1/koulutus/%s?meta=false&img=false" % (
                ii["oid"])
            try:
                httpconn.request('GET', url)
                r = httpconn.getresponse()
                j = json.loads(r.read())
            except ValueError, e:
                show("-- %d -- could not load %s" % (cnt, ii["oid"]))
            else:
                i = j["result"]
                row = makerow()

                for col in row:
                    if col == "nimi":
                        row["nimi"] = getnimi(i, "fi")
                        row["nimi_sv"] = getnimi(i, "sv")
                        row["nimi_en"] = getnimi(i, "en")
                    elif "_uri" in col:
                        (colkey, coluri) = col.split("_")
                        if colkey in i:
                            if coluri in i[colkey]:
                                row[col] = i[colkey][coluri]
                    elif "_arvo" in col:
                        (colkey, colarvo) = col.split("_")
                        if colkey in i:
                            if colarvo in i[colkey]:
                                row[col] = i[colkey][colarvo]
                    #elif col == "koulutuskoodi_arvo":
                    # (colkey,colarvo) = col.split("_")
                    # if colkey in i:
                    #   if colarvo in i[colkey]:
                    #     row[col] = i[colkey][colarvo]
                    elif col == "koulutuskoodi_nimi":
                        (colkey, colnimi) = col.split("_")
                        if colkey in i:
                            if colnimi in i[colkey]:
                                row[col] = i[colkey][colnimi]
                    else:
                        row[col] = None if col not in i else i[col]
                        if type(row[col]) is list:
                            row[col] = ''.join(map(str, json.dumps(row[col])))

                # add organization oid stored from search results above
                row["organisaatio_oid"] = iii["oid"]

                if verbose: show("%d -- %s" % (cnt, row["oid"]))
                if debug: print row
                dboperator.insert(hostname + url, schema, table, row, debug)
def load(secure,hostname,url,schema,table,codeset,verbose=False,debug=False):
  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" begin"

  row = makerow()
  dboperator.columns(row,debug)

  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" empty %s.%s"%(schema,table)
  dboperator.empty(schema,table,debug)

  url = url % codeset # korvaa placeholder
  if secure:
    httpconn = httplib.HTTPSConnection(hostname)
    print strftime("%Y-%m-%d %H:%M:%S", localtime())+" load securely from "+hostname+url
  else:
    httpconn = httplib.HTTPConnection(hostname)
    print strftime("%Y-%m-%d %H:%M:%S", localtime())+" load from "+hostname+url

  httpconn.request('GET', url)
  r = httpconn.getresponse()
  j = json.loads(r.read())
  cnt = 0
  for i in j:
    cnt += 1
    row = makerow()

    row["koodi"] = i["koodiArvo"]
    row["nimi"] = getnimi(i,"FI")
    row["nimi_sv"] = getnimi(i,"SV")
    row["nimi_en"] = getnimi(i,"EN")
    row["alkupvm"] = i["voimassaAlkuPvm"]
    row["loppupvm"] = i["voimassaLoppuPvm"]

    httpconn.request('GET', "/koodisto-service/rest/json/relaatio/sisaltyy-alakoodit/%s" % i["koodiUri"])
    rr = httpconn.getresponse()
    jj = json.loads(rr.read())
    ss = ""
    for ii in jj:
      if ii["koodisto"]["koodistoUri"] == "koulutusasteoph2002":
        row["koulutusaste2002koodi"] = ii["koodiArvo"]
        row["koulutusaste2002nimi"] = getnimi(ii,"FI")
        row["koulutusaste2002nimi_sv"] = getnimi(ii,"SV")
        row["koulutusaste2002nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "koulutusalaoph2002":
        row["koulutusala2002koodi"] = ii["koodiArvo"]
        row["koulutusala2002nimi"] = getnimi(ii,"FI")
        row["koulutusala2002nimi_sv"] = getnimi(ii,"SV")
        row["koulutusala2002nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "opintoalaoph2002":
        row["opintoala2002koodi"] = ii["koodiArvo"]
        row["opintoala2002nimi"] = getnimi(ii,"FI")
        row["opintoala2002nimi_sv"] = getnimi(ii,"SV")
        row["opintoala2002nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "koulutusasteoph1995":
        row["koulutusaste1995koodi"] = ii["koodiArvo"]
        row["koulutusaste1995nimi"] = getnimi(ii,"FI")
        row["koulutusaste1995nimi_sv"] = getnimi(ii,"SV")
        row["koulutusaste1995nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "koulutusalaoph1995":
        row["koulutusala1995koodi"] = ii["koodiArvo"]
        row["koulutusala1995nimi"] = getnimi(ii,"FI")
        row["koulutusala1995nimi_sv"] = getnimi(ii,"SV")
        row["koulutusala1995nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "opintoalaoph1995":
        row["opintoala1995koodi"] = ii["koodiArvo"]
        row["opintoala1995nimi"] = getnimi(ii,"FI")
        row["opintoala1995nimi_sv"] = getnimi(ii,"SV")
        row["opintoala1995nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "tutkinto":
        row["tutkintokoodi"] = ii["koodiArvo"]
        row["tutkintonimi"] = getnimi(ii,"FI")
        row["tutkintonimi_sv"] = getnimi(ii,"SV")
        row["tutkintonimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "tutkintotyyppi":
        row["tutkintotyyppikoodi"] = ii["koodiArvo"]
        row["tutkintotyyppinimi"] = getnimi(ii,"FI")
        row["tutkintotyyppinimi_sv"] = getnimi(ii,"SV")
        row["tutkintotyyppinimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "koulutustyyppi":
        row["koulutustyyppikoodi"] = ii["koodiArvo"]
        row["koulutustyyppinimi"] = getnimi(ii,"FI")
        row["koulutustyyppinimi_sv"] = getnimi(ii,"SV")
        row["koulutustyyppinimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "isced2011koulutusaste":
        row["isced2011koulutusastekoodi"] = ii["koodiArvo"]
        row["isced2011koulutusastenimi"] = getnimi(ii,"FI")
        row["isced2011koulutusastenimi_sv"] = getnimi(ii,"SV")
        row["isced2011koulutusastenimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "isced2011koulutusastetaso1":
        row["isced2011koulutusastetaso1koodi"] = ii["koodiArvo"]
        row["isced2011koulutusastetaso1nimi"] = getnimi(ii,"FI")
        row["isced2011koulutusastetaso1nimi_sv"] = getnimi(ii,"SV")
        row["isced2011koulutusastetaso1nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "isced2011koulutusastetaso2":
        row["isced2011koulutusastetaso2koodi"] = ii["koodiArvo"]
        row["isced2011koulutusastetaso2nimi"] = getnimi(ii,"FI")
        row["isced2011koulutusastetaso2nimi_sv"] = getnimi(ii,"SV")
        row["isced2011koulutusastetaso2nimi_en"] = getnimi(ii,"EN")	
      if ii["koodisto"]["koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusastetaso1":
        row["koulutusluokitus2016koulutusastetaso1koodi"] = ii["koodiArvo"]
        row["koulutusluokitus2016koulutusastetaso1nimi"] = getnimi(ii,"FI")
        row["koulutusluokitus2016koulutusastetaso1nimi_sv"] = getnimi(ii,"SV")
        row["koulutusluokitus2016koulutusastetaso1nimi_en"] = getnimi(ii,"EN")
      # huom! https://www.stat.fi/meta/luokitukset/koulutus/001-2016/kuvaus.html
      # kansallinenkoulutusluokitus2016koulutusastetaso2 -> isced2011koulutusastetaso2
      if ii["koodisto"]["koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusastetaso2":
        row["koulutusluokitus2016koulutusastetaso2koodi"] = ii["koodiArvo"]
        row["koulutusluokitus2016koulutusastetaso2nimi"] = getnimi(ii,"FI")
        row["koulutusluokitus2016koulutusastetaso2nimi_sv"] = getnimi(ii,"SV")
        row["koulutusluokitus2016koulutusastetaso2nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso1":
        row["isced2011koulutusalataso1koodi"] = ii["koodiArvo"]
        row["isced2011koulutusalataso1nimi"] = getnimi(ii,"FI")
        row["isced2011koulutusalataso1nimi_sv"] = getnimi(ii,"SV")
        row["isced2011koulutusalataso1nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusalataso1":
        row["koulutusluokitus2016koulutusalataso1koodi"] = ii["koodiArvo"]
        row["koulutusluokitus2016koulutusalataso1nimi"] = getnimi(ii,"FI")
        row["koulutusluokitus2016koulutusalataso1nimi_sv"] = getnimi(ii,"SV")
        row["koulutusluokitus2016koulutusalataso1nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso2":
        row["isced2011koulutusalataso2koodi"] = ii["koodiArvo"]
        row["isced2011koulutusalataso2nimi"] = getnimi(ii,"FI")
        row["isced2011koulutusalataso2nimi_sv"] = getnimi(ii,"SV")
        row["isced2011koulutusalataso2nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusalataso2":
        row["koulutusluokitus2016koulutusalataso2koodi"] = ii["koodiArvo"]
        row["koulutusluokitus2016koulutusalataso2nimi"] = getnimi(ii,"FI")
        row["koulutusluokitus2016koulutusalataso2nimi_sv"] = getnimi(ii,"SV")
        row["koulutusluokitus2016koulutusalataso2nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "isced2011koulutusalataso3":
        row["isced2011koulutusalataso3koodi"] = ii["koodiArvo"]
        row["isced2011koulutusalataso3nimi"] = getnimi(ii,"FI")
        row["isced2011koulutusalataso3nimi_sv"] = getnimi(ii,"SV")
        row["isced2011koulutusalataso3nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "kansallinenkoulutusluokitus2016koulutusalataso3":
        row["koulutusluokitus2016koulutusalataso3koodi"] = ii["koodiArvo"]
        row["koulutusluokitus2016koulutusalataso3nimi"] = getnimi(ii,"FI")
        row["koulutusluokitus2016koulutusalataso3nimi_sv"] = getnimi(ii,"SV")
        row["koulutusluokitus2016koulutusalataso3nimi_en"] = getnimi(ii,"EN")
      if ii["koodisto"]["koodistoUri"] == "okmohjauksenala":
        row["okmohjauksenalakoodi"] = ii["koodiArvo"]
        row["okmohjauksenalanimi"] = getnimi(ii,"FI")
        row["okmohjauksenalanimi_sv"] = getnimi(ii,"SV")
        row["okmohjauksenalanimi_en"] = getnimi(ii,"EN")

    if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" %d -- %s"%(cnt,row["koodi"])
    dboperator.insert(hostname+url,schema,table,row,debug)

  dboperator.close(debug)

  if verbose: print strftime("%Y-%m-%d %H:%M:%S", localtime())+" ready"
Ejemplo n.º 25
0
def load(secure, hostname, url, schema, table, postdata, condition, verbose):
    show("begin " + hostname + " " + url + " " + schema + " " + table + " " +
         (postdata or "No postdata") + " " + (condition or ""))

    address = "http://" + hostname + url
    show("load from " + address)

    reqheaders = {'Content-Type': 'application/json'}
    reqheaders['Caller-Id'] = '1.2.246.562.10.2013112012294919827487.vipunen'

    # api credentials from env vars
    if os.getenv("API_USERNAME"):
        show("using authentication")
        apiuser = os.getenv("API_USERNAME")
        apipass = os.getenv("API_PASSWORD")
        reqheaders['Authorization'] = 'Basic %s' % base64.b64encode(apiuser +
                                                                    ":" +
                                                                    apipass)

    # automatic POST with (post)data
    #request = urllib.request.Request(address, data=postdata, headers=reqheaders)
    #time=300
    try:
        response = requests.get(address, headers=reqheaders).json()

    except Exception as e:
        show('HTTP GET failed.')
        show('Reason: %s' % (str(e)))
        sys.exit(2)

    else:
        # everything is fine
        show("api call OK")

    # remove data conditionally, otherwise empty
    # merge operation could be considered here...
    if condition:
        show("remove from %s.%s with condition '%s'" %
             (schema, table, condition))
        dboperator.execute("DELETE FROM %s.%s WHERE %s" %
                           (schema, table, condition))
    else:
        show("empty %s.%s" % (schema, table))
        dboperator.empty(schema, table)

    show("insert data")
    cnt = 0

    for i in response:
        cnt += 1
        # make "columnlist" (type has no meaning as we're not creating table)
        row = makerow()
        # setup dboperator so other calls work
        dboperator.columns(row)
        row["avoinKK"] = jv(i, "avoinKK")
        row["db"] = jv(i, "db")
        row["erillinenOpintoOikeus"] = jv(i, "erillinenOpintoOikeus")
        row["kansainvVaihto"] = jv(i, "kansainvVaihto")
        row["kkYhteistyo"] = jv(i, "kkYhteistyo")
        row["koodi"] = jv(i, "koodi")
        row["koulutustyyppi"] = jv(i, "koulutustyyppi")
        row["kuvaus"] = jv(i, "kuvaus")
        row["lukumaara"] = jv(i, "lukumaara")
        row["luoja"] = jv(i, "luoja")
        row["luontipaivamaara"] = jv(i, "luontipaivamaara")
        row["maahanmValKoulutus"] = jv(i, "maahanmValKoulutus")
        row["oppilaitostunnus"] = jv(i, "oppilaitostunnus")
        row["perustutkOpiskelijat"] = jv(i, "perustutkOpiskelijat")
        row["suorituspaiva"] = jv(i, "suorituspaiva")
        row["tkiHarjoittelunLaajuus"] = jv(i, "tkiHarjoittelunLaajuus")
        row["tkiMuutLaajuus"] = jv(i, "tkiMuutLaajuus")
        row["tkiToiminnanLaajuus"] = jv(i, "tkiToiminnanLaajuus")
        row["ulkomaaharjoittelu"] = jv(i, "ulkomaaharjoittelu")
        row["ulkomailtaHyvLuet"] = jv(i, "ulkomailtaHyvLuet")
        row["vieraskSuoritukset"] = jv(i, "vieraskSuoritukset")
        row["vuosi"] = jv(i, "vuosi")
        row["erikoistumiskoulutus"] = jv(i, "erikoistumiskoulutus")

        dboperator.insert(hostname + url, schema, table, row)
        # show some sign of being alive
        if cnt % 100 == 0:
            sys.stdout.write('.')
            sys.stdout.flush()
        if cnt % 1000 == 0:
            show("-- %d" % (cnt))
        if verbose: show("%d -- %s" % (cnt, row))
    show("wrote %d" % (cnt))
    show("ready")
Ejemplo n.º 26
0
def load(secure,
         hostname,
         url,
         schema,
         table,
         codeset,
         verbose=False,
         debug=False):
    if verbose: print(strftime("%Y-%m-%d %H:%M:%S", localtime()) + " begin")

    row = makerow()
    dboperator.columns(row, debug)

    if verbose:
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) + " empty %s.%s" %
            (schema, table))
    dboperator.empty(schema, table, debug)

    url = url % codeset  # replace placeholder
    if secure:
        httpconn = httplib.HTTPSConnection(hostname)
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) +
            " load securely from " + hostname + url)
    else:
        httpconn = httplib.HTTPConnection(hostname)
        print(
            strftime("%Y-%m-%d %H:%M:%S", localtime()) + " load from " +
            hostname + url)

    reqheaders = {'Caller-Id': '1.2.246.562.10.2013112012294919827487.vipunen'}
    httpconn.request('GET', url, headers=reqheaders)
    #httpconn.request('GET', url)

    r = httpconn.getresponse()
    j = json.loads(r.read())
    cnt = 0
    for i in j:
        cnt += 1
        row = makerow()

        row["koodi"] = jv(i, "koodiArvo")
        row["nimi"] = getnimi(i, "FI")
        row["nimi_sv"] = getnimi(i, "SV")
        row["nimi_en"] = getnimi(i, "FI")
        row["alkupvm"] = jv(i, "voimassaAlkuPvm")
        row["loppupvm"] = jv(i, "voimassaLoppuPvm")

        # classifications (nb! avi is in different direction!)
        httpconn.request(
            'GET',
            "/koodisto-service/rest/json/relaatio/sisaltyy-ylakoodit/%s" %
            i["koodiUri"],
            headers=reqheaders)
        rr = httpconn.getresponse()
        jj = json.loads(rr.read())
        for ii in jj:
            if ii["koodisto"]["koodistoUri"] == "aluehallintovirasto":
                row["avikoodi"] = jv(ii, "koodiArvo")
                row["avinimi"] = getnimi(ii, "FI")
                row["avinimi_sv"] = getnimi(ii, "SV")
                row["avinimi_en"] = getnimi(ii, "EN")
        # other classifications
        httpconn.request(
            'GET',
            "/koodisto-service/rest/json/relaatio/sisaltyy-alakoodit/%s" %
            i["koodiUri"],
            headers=reqheaders)
        rr = httpconn.getresponse()
        jj = json.loads(rr.read())
        for ii in jj:
            if ii["koodisto"]["koodistoUri"] == "maakunta":
                row["maakuntakoodi"] = jv(ii, "koodiArvo")
                row["maakuntanimi"] = getnimi(ii, "FI")
                row["maakuntanimi_sv"] = getnimi(ii, "SV")
                row["maakuntanimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "elykeskus":
                row["elykoodi"] = jv(ii, "koodiArvo")
                row["elynimi"] = getnimi(ii, "FI")
                row["elynimi_sv"] = getnimi(ii, "SV")
                row["elynimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "kielisuhde":
                row["kielisuhdekoodi"] = jv(ii, "koodiArvo")
                row["kielisuhdenimi"] = getnimi(ii, "FI")
                row["kielisuhdenimi_sv"] = getnimi(ii, "SV")
                row["kielisuhdenimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "seutukunta":
                row["seutukuntakoodi"] = jv(ii, "koodiArvo")
                row["seutukuntanimi"] = getnimi(ii, "FI")
                row["seutukuntanimi_sv"] = getnimi(ii, "SV")
                row["seutukuntanimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "laani":
                row["laanikoodi"] = jv(ii, "koodiArvo")
                row["laaninimi"] = getnimi(ii, "FI")
                row["laaninimi_sv"] = getnimi(ii, "SV")
                row["laaninimi_en"] = getnimi(ii, "EN")
            if ii["koodisto"]["koodistoUri"] == "kuntaryhma":
                row["kuntaryhmakoodi"] = jv(ii, "koodiArvo")
                row["kuntaryhmanimi"] = getnimi(ii, "FI")
                row["kuntaryhmanimi_sv"] = getnimi(ii, "SV")
                row["kuntaryhmanimi_en"] = getnimi(ii, "EN")

        if verbose:
            print(
                strftime("%Y-%m-%d %H:%M:%S", localtime()) + " %d -- %s" %
                (cnt, row["koodi"]))
        dboperator.insert(hostname + url, schema, table, row, debug)

    dboperator.close(debug)

    if verbose: print(strftime("%Y-%m-%d %H:%M:%S", localtime()) + " ready")
Ejemplo n.º 27
0
def load(url, schema, table, condition):
    """
    Results from ARVO-API can come in multiple pages. If that's the case,
    we need to make multiple requests to the ARVO API, using the "next_url" parameter.
    """

    FIRST_LOOP = True  # This is used to make possible DELETE operation (due to condition) only once.

    while True:
        show("begin " + url + " " + schema + " " + table + " " +
             (condition or ""))
        show("load from " + url)

        reqheaders = {'Content-Type': 'application/json'}
        # api credentials from env vars
        if os.getenv("API_USERNAME"):
            show("using authentication")
            apiuser = os.getenv("API_USERNAME")
            apipass = os.getenv("API_PASSWORD")
            reqheaders['Authorization'] = 'Basic %s' % base64.b64encode(
                apiuser + ":" + apipass)

        try:
            r = requests.get(url, headers=reqheaders)
        except requests.exceptions.RequestException as e:
            print e
            sys.exit(1)

        if r.status_code != 200:
            print "Error! HTTP status code: " + str(r.status_code)
            sys.exit(2)

        try:
            result = json.loads(r.content)
        except ValueError as e:
            print e
            sys.exit(3)

        if "pagination" not in result or "data" not in result:
            print "Error! Received JSON-data not valid."
            sys.exit(4)

        # everything is fine
        show("api call OK")
        """
          Received data e.g.

            {
              "data": [
                {
                  "taustakysymykset": true,
                  "koulutustoimija": "xxxx",
                  "vastausid": 1111,
                  "kyselykertaid": 123,
                  "kysely_alkupvm": "2016-11-29T22:00:00Z",
                  "suorituskieli": "fi",
                  "tutkinto_fi": "xxxx",
                  "opintoala_en": "xxxx",
                  "valmistavan_koulutuksen_jarjestaja_en": "xxxx",
                  "kysymys_en": "xxxx",
                  "koulutustoimija_en": "xxxx",
                  "tutkintotunnus": "xxxx",
                  "numerovalinta": 2,
                  "valmistavan_koulutuksen_oppilaitos_sv": "xxxx",
                  "kysymys_sv": "xxxx",
                  "kysymysjarjestys": 0,
                  "opintoala_sv": "xxxx",
                  "monivalintavaihtoehto": "xxxx",
                  "kysymysid": 1234,
                  "valmistavan_koulutuksen_oppilaitos_fi": "xxxx",
                  "kysely_en": "xxxx",
                  "vastaustyyppi": "xxxx",
                  "kysymysryhma": "xxxx",
                  "tutkinto_en": null,
                  "kunta": null,
                  "kysymysryhmaid": 110,
                  "kysymysryhmajarjestys": 0,
                  "vaihtoehto": null,
                  "opintoala_fi": "xxxx",
                  "kysymys_fi": "Ik",
                  "vastaajaid": 123,
                  "kyselyid": 111,
                  "valmistavan_koulutuksen_jarjestaja_fi": "xxxx",
                  "kysymysryhma_en": "xxxx",
                  "kysely_sv": "xxxx",
                  "kysymysryhma_fi": "xxxx",
                  "opintoalatunnus": "xxxx",
                  "valmistavan_koulutuksen_jarjestaja_sv": "xxxx",
                  "vastausaika": "2017-02-05T22:00:00Z",
                  "tunnus": "xxxx",
                  "valmistavan_koulutuksen_jarjestaja": "xxxx",
                  "koulutustoimija_fi": "xxxx",
                  "kysely_loppupvm": null,
                  "koulutusmuoto": null,
                  "kyselykerta": "xxxx",
                  "valmistavan_koulutuksen_oppilaitos_en": "xxxx",
                  "valtakunnallinen": true,
                  "tutkinto_sv": null,
                  "koulutustoimija_sv": "xxxx",
                  "valmistavan_koulutuksen_oppilaitos": "xxxx",
                  "kysely_fi": "xxxx",
                  "kysymysryhma_sv": "xxxx"
                }
              ],
              "pagination": {
                "next_url": "null"
              }
            }

        """

        address = url.split(
            "?"
        )[0]  # Save in DB only the part before ?-mark: https://arvo.csc.fi/api/vipunen?alkupvm=2018-01-01&loppupvm=2018-02-01

        # remove data conditionally, otherwise empty
        # merge operation could be considered here...
        if FIRST_LOOP:  # This is done only on the first go (no matter if Arvo returns one or multiple pages)
            if condition:
                show("remove from %s.%s with condition '%s'" %
                     (schema, table, condition))
                dboperator.execute("DELETE FROM %s.%s WHERE %s" %
                                   (schema, table, condition))
            else:
                show("empty %s.%s" % (schema, table))
                dboperator.empty(schema, table)

        show("insert data")
        cnt = 0
        for row in result["data"]:
            cnt += 1
            # show some sign of being alive
            if cnt % 100 == 0:
                sys.stdout.write('.')
                sys.stdout.flush()
            if cnt % 1000 == 0:
                show("-- %d" % (cnt))

            # find out which columns to use on insert
            dboperator.resetcolumns(row)

            # flatten arrays/lists
            for col in row:
                if type(row[col]) is list:
                    row[col] = ''.join(map(str, json.dumps(row[col])))

            dboperator.insert(address, schema, table, row)

        show("wrote %d" % (cnt))
        show("ready")

        if result["pagination"]["next_url"] == "null":
            break  # exit while-loop. We are done.
        else:
            url = result["pagination"]["next_url"]
            FIRST_LOOP = False  # Do not make the possible DELETE-operation anymore!
Ejemplo n.º 28
0
    if cnt%100 == 0:
      sys.stdout.write('.')
      sys.stdout.flush()
    if cnt%1000 == 0:
      show("-- %d" % (cnt))
    if verbose: show("%d -- %s"%(cnt,row))

    # find out which columns to use on insert
    dboperator.resetcolumns(row)

    # flatten arrays/lists
    for col in row:
      if type(row[col]) is list:
        row[col] = ''.join(map(str,json.dumps(row[col])))

    dboperator.insert(address,schema,table,row)

  show("wrote %d"%(cnt))
  show("ready")

def usage():
  print """
usage: load.py [-s|--secure] -H|--hostname <hostname> -u|--url <url> -e|--schema <schema> -t|--table <table> [-p|--postdata] [-c|--condition <condition>] [-v|--verbose]
"""

def main(argv):
  # muuttujat jotka kerrotaan argumentein
  secure=False
  hostname,url,schema,table="","","",""
  postdata=None
  condition=None
Ejemplo n.º 29
0
def load(url, schema, table, condition):
    """
    Results from VARDA-API can come in multiple pages. If that's the case,
    we need to make multiple requests to the VARDA API, using the "next" parameter.
    """

    # First delete all from TABLE -> Start from scratch. TODO: Delete based on condition.
    dboperator.execute("DELETE FROM %s.%s" % (schema, table))

    while True:
        show("begin " + url + " " + schema + " " + table + " " + (condition or ""))
        show("load from " + url)

        reqheaders = {'Content-Type': 'application/json'}
        # api credentials from env vars
        if os.getenv("VARDA_API_KEY"):
            show("using authentication")
            api_key = os.getenv("VARDA_API_KEY")
            reqheaders['Authorization'] = 'Token %s' % api_key

        try:
            r = requests.get(url, headers=reqheaders)
        except requests.exceptions.RequestException as e:
            print e
            sys.exit(1)

        if r.status_code != 200:
            print "Error! HTTP status code: " + str(r.status_code)
            sys.exit(2)

        try:
            data = json.loads(r.content)
        except ValueError as e:
            print e
            sys.exit(3)

        # everything is fine
        show("api call OK")

        # Parse URL
        # From https://varda.oso-pilot.csc.fi/api/v1/toimipisteet/ save in DB https://varda.oso-pilot.csc.fi
        n = url.find("/", url.find("/") + 2)  # find 3rd occurance of "/"
        address = url[:n]

        show("insert data")
        cnt = 0
        for row in data["results"]:
            cnt += 1
            # show some sign of being alive
            if cnt % 100 == 0:
                sys.stdout.write('.')
                sys.stdout.flush()
            if cnt % 1000 == 0:
                show("-- %d" % (cnt))

            # Explicitly remove the keys from dict (row) that are not saved in Antero DB
            del row['johtaja']
            del row['url']
            del row['muutos_pvm']
            del row['vaka_jarjestaja']
            del row['toimipaikat']

            # find out which columns to use on insert
            dboperator.resetcolumns(row)

            # flatten arrays/lists
            for col in row:
                if type(row[col]) is list:
                    row[col] = ''.join(map(str, json.dumps(row[col])))

            dboperator.insert(address, schema, table, row)

        show("wrote %d" % (cnt))
        show("ready")

        if data["next"] is None:
            break  # exit while-loop. We are done.
        else:
            url = data["next"]