コード例 #1
0
def unscrub_emails(project):
    partners = load_identifier_list_of_type(project)
    # alle Lieferanten durchgehen
    for partner in partners:
        sigel = 'DE-' + partner.capitalize()
        logging.info('processing partner {}'.format(sigel))

        # Die URL für die API zusammensetzen
        partner_json = get_partner(sigel)

        # Prüfen, ob die Abfrage erfolgreich war (Status-Code ist dann 200)
        if partner_json is not None:

            # Dieser boolean entscheidet, ob der Code des Partners geändert wurde.
            changed_code = False
            try:
                # die ISO-Details auslesen
                email_address = partner_json['partner_details'][
                    'profile_details']['iso_details']['email_address']
                if len(email_address) == 59:
                    logging.warning("email of partner {} os potentially cut")
                if 'SCRUBBED_' in email_address:
                    partner_json['partner_details']['profile_details'][
                        'iso_details'][
                            'email_address'] = email_address.replace(
                                'SCRUBBED_', '')
                    update_partner(partner_json)
                else:
                    logging.info(
                        'email of partner {} does not need to be unscrubbed'.
                        format(sigel))
            except KeyError:
                logging.warning('no email address in iso details in partner ' +
                                sigel)
コード例 #2
0
def add_sys_list_checker(list_filter):
    checklist = load_identifier_list_of_type('package')
    line_checker = LineChecker(method_name='has_title_sys_id',
                               checklist=checklist,
                               mode='remove')
    list_filter.add_line_checker(line_checker)
    return list_filter
コード例 #3
0
def set_pin_old(project):
    api_key = os.environ['ALMA_SCRIPT_API_KEY']
    users = load_identifier_list_of_type(project)
    logging.info(
        'succesfully updated user | {} | {} | {} | {} | {} | {}'.format(
            'user_id', 'gender', 'title', 'first_name', 'last_name', 'email'))
    for user_id in users:
        user = get_user(user_id)
        if user is not None:
            first_name = user['first_name']
            last_name = user['last_name']
            gender = user['gender']['value']
            title = user['user_title']['value']
            logging.debug(user)
            birth_date_parts = user['birth_date'].split('-')
            logging.debug(birth_date_parts)
            pin_code = birth_date_parts[2].replace(
                'Z', '') + birth_date_parts[1] + birth_date_parts[0]
            user['pin_number'] = pin_code
            email = ''
            if len(user['contact_info']['emails']) > 0:
                for email in user['contact_info']['emails']:
                    if email['preferred'] == True:
                        email = email['email_address']
            update_successful = update_user(user)
            # Prüfen, ob Anfrage erfolgreich war und alles in die Log-Datei schreiben
            if update_successful:
                logging.info(
                    'succesfully updated user | {} | {} | {} | {} | {} | {}'.
                    format(user_id, gender, title, first_name, last_name,
                           email))
コード例 #4
0
def extend_partner_names(project):
    # Datei mit den Lieferanten eines Typs laden
    partners = load_identifier_list_of_type(project)

    # alle Lieferanten durchgehen
    for partner in partners:

        partner_json = get_partner(partner)

        # Prüfen, ob die Abfrage erfolgreich war
        if partner_json is not None:
            try:
                if partner_json['partner_details']['profile_details'][
                        'profile_type'] == 'SLNP':
                    symbol = partner_json['partner_details'][
                        'profile_details']['iso_details']['iso_symbol']
                    if 'DE-' in symbol:
                        symbol = symbol.replace('DE-', '')
                    symbol = 'DE-' + symbol.capitalize()
                    partner_json['partner_details']['profile_details'][
                        'iso_details']['iso_symbol'] = symbol
                    name = partner_json['partner_details']['name']
                    if not name.startswith('DE-'):
                        partner_json['partner_details'][
                            'name'] = '{} ({})'.format(symbol, name)
                    update_partner(partner_json)
                else:
                    logging.warning(
                        'could not update partner {}: no SLNP'.format(partner))
            except KeyError:
                logging.error('no iso details for partner {}'.format(partner))
コード例 #5
0
def set_pin_and_password(project):
    users = load_identifier_list_of_type(project)
    logging.info(
        'succesfully updated user | {} | {} | {} | {} | {} | {} | {}'.format(
            'user_id', 'gender', 'title', 'first_name', 'last_name',
            'passphrase', 'email'))
    for user_id in users:
        user = get_user(user_id)
        if user is not None:
            first_name = user['first_name']
            last_name = user['last_name']
            gender = user['gender']['value']
            title = user['user_title']['value']
            birth_date = user['birth_date']
            pin_code = calculate_standard_pin(birth_date)
            passphrase = ''.join(
                random.SystemRandom().choice(string.ascii_uppercase +
                                             string.ascii_lowercase +
                                             string.digits) for _ in range(12))
            user['pin_number'] = pin_code
            user['password'] = passphrase
            email = ''
            if len(user['contact_info']['email']) > 0:
                for email in user['contact_info']['email']:
                    if email['preferred'] == True:
                        email = email['email_address']

            update_successful = update_user(user)
            # Prüfen, ob Anfrage erfolgreich war und alles in die Log-Datei schreiben
            if update_successful:
                logging.info(
                    'succesfully updated user | {} | {} | {} | {} | {} | {} | {}'
                    .format(user_id, gender, title, first_name, last_name,
                            passphrase, email))
コード例 #6
0
def set_hash(project):
    users = load_identifier_list_of_type(project)
    number_of_threads = 6
    length_of_chunks = math.ceil(len(users) / number_of_threads)
    list_chunks = list(chunks(users, length_of_chunks))
    for chunk_index, chunk in enumerate(list_chunks):
        thread = Thread(target=set_hash_for_chunk, args=(chunk, 'test'))
        thread.start()
コード例 #7
0
def check_pin(project, update=False):
    users = load_identifier_list_of_type(project)
    number_of_threads = 10
    length_of_chunks = math.ceil(len(users) / number_of_threads)
    list_chunks = list(chunks(users, length_of_chunks))
    for chunk_index, chunk in enumerate(list_chunks):
        thread = Thread(target=check_pin_for_chunk, args=(chunk, update))
        thread.start()
コード例 #8
0
def clean_addresses(project):
    users = load_identifier_list_of_type(project)
    number_of_threads = 2
    length_of_chunks = math.ceil(len(users) / number_of_threads)
    list_chunks = list(chunks(users, length_of_chunks))
    for chunk_index, chunk in enumerate(list_chunks):
        thread = Thread(target=clean_first_lines_for_chunk,
                        args=(chunk, 'test'))
        thread.start()
コード例 #9
0
def set_email_addresses(project, email):
    users = load_identifier_list_of_type(project)
    number_of_threads = 10
    length_of_chunks = math.ceil(len(users) / number_of_threads)
    list_chunks = list(chunks(users, length_of_chunks))
    for chunk_index, chunk in enumerate(list_chunks):
        thread = Thread(target=set_eamil_addresses_for_chunk,
                        args=(list_chunks[chunk_index], email))
        thread.start()
コード例 #10
0
def set_pin_pw_and_addresses(project, set_passphrase=False):
    users = load_identifier_list_of_type(project)
    number_of_threads = 10
    length_of_chunks = math.ceil(len(users) / number_of_threads)
    list_chunks = list(chunks(users, length_of_chunks))
    for chunk_index, chunk in enumerate(list_chunks):
        thread = Thread(target=set_pin_pw_and_addresses_for_chunk,
                        args=(list_chunks[chunk_index], set_passphrase))
        thread.start()
コード例 #11
0
ファイル: polines.py プロジェクト: ETspielberg/alma-scripts
def transfer_konsol_note(project):
    po_references = load_identifier_list_of_type(project)
    number_of_threads = 10
    length_of_chunks = math.ceil(len(po_references) / number_of_threads)
    list_chunks = list(chunks(po_references, length_of_chunks))
    for chunk_index, chunk in enumerate(list_chunks):
        thread = Thread(target=transfer_konsol_note_for_chunk,
                        args=(chunk, 'test'))
        thread.start()
コード例 #12
0
def correct_process_type(project, department):
    item_list = list_reader_service.load_identifier_list_of_type(project)
    number_of_threads = 8
    length_of_chunks = math.ceil(len(item_list) / number_of_threads)
    list_chunks = list(chunks(item_list, length_of_chunks))
    for chunk_index, chunk in enumerate(list_chunks):
        thread = Thread(target=correct_process_type_for_chunk,
                        args=(chunk, department))
        thread.start()
コード例 #13
0
def add_id_checker(list_filter,
                   action='append',
                   list='springer_robotics_auswahl'):
    checklist = load_identifier_list_of_type(list)
    line_checker = LineChecker(method_name='contains',
                               checklist=checklist,
                               mode=action,
                               field='020 ',
                               format='aseq_L')
    list_filter.add_line_checker(line_checker)
    return list_filter
コード例 #14
0
def generate_output(input_file, project):
    marks = list_reader_service.load_identifier_list_of_type(project)
    file = open('data/input/{}'.format(input_file), 'r',
                encoding='utf-8').read()
    table = []
    for mark in marks:
        entry = {}
        entry['mark'] = mark
        entry['count'] = file.count(mark)
        table.append(entry)
    output_file = 'data/output/{}_out.xlsx'.format(project)
    new_table = pd.DataFrame(table)
    new_table.to_excel(output_file)
コード例 #15
0
def update_vendors(type):
    # Datei mit den Lieferanten eines Typs laden
    vendors = load_identifier_list_of_type('vendor_' + type)

    # API-Key aus den Umgebungsvariablen lesen
    api_key = os.environ['ALMA_SCRIPT_API_KEY']

    # alle Lieferanten durchgehen
    for vendor_line in vendors:

        # Die URL für die API zusammensetzen
        url = '{}acq/vendors/{}?apikey={}'.format(alma_api_base_url,
                                                  vendor_line, api_key)

        # GET-Abfrage ausführen
        get = requests.get(url=url, headers={'Accept': 'application/json'})

        # Kodierung auf UTF-8 festsetzen
        get.encoding = 'utf-8'

        # Prüfen, ob die Abfrage erfolgreich war (Status-Code ist dann 200)
        if get.status_code == 200:

            # Den Inhalt der Antwort als Text auslesen
            info = get.text

            # In dem Text den Typ auf Inactive ändern
            payload = info.replace(
                '"status":{"value":"ACTIVE","desc":"Active"}',
                '"status":{"value":"INACTIVE","desc":"Inactive"}')

            # Update als PUT-Abfrage ausführen. URL ist die gleiche, Encoding ist wieder utf-8, Inhalt ist JSON
            update = requests.put(url=url,
                                  data=payload.encode('utf-8'),
                                  headers={'Content-Type': 'application/json'})

            # Antwort-Encoding ist wieder UTF-8
            update.encoding = 'utf-8'

            # Prüfen, ob Anfrage erfolgreich war und alles in die Log-Datei schreiben
            if update.status_code == 200:
                logging.info(
                    'succesfully updated vendor {}'.format(vendor_line))
            else:
                logging.warning('problem updating vendor {}:{}'.format(
                    vendor_line, update.text))
        else:
            logging.error(get.text)
コード例 #16
0
def make_staff__users(project):
    # Datei mit den Benutzerkennungen laden
    users = load_identifier_list_of_type(project)

    # alle Nutzer durchgehen
    for user_id in users:
        user = get_user(user_id)
        # Prüfen, ob die Abfrage erfolgreich war (Status-Code ist dann 200)
        if user is not None:
            # Prüfen, ob der Nutzer Public ist
            if user['record_type']['value'] == 'PUBLIC':

                user['record_type']['value'] = 'STAFF'
                user['record_type']['desc'] = 'Staff'
                update_user(user)
            else:
                logging.info('user {} not public'.format(user))
コード例 #17
0
def delete_home_library(project):
    users = list_reader_service.load_identifier_list_of_type(project)
    # users = set_reader_service.collect_ids_from_set(set_id)
    # logging.info('retrieved {} user entries'.format(len(users)))
    # ids = []
    # for member in users:
    # ids.append(member['id'])
    logging.info('retrieved {} user ids'.format(len(users)))
    # list_reader_service.save_identifier_list_of_type('DeleteHomeLibrary', ids, 'users')
    # logging.info('saved {} user entries'.format(len(users)))
    number_of_threads = 1
    length_of_chunks = math.ceil(len(users) / number_of_threads)
    list_chunks = list(chunks(users, length_of_chunks))
    for chunk_index, chunk in enumerate(list_chunks):
        thread = Thread(target=delete_home_library_for_chunk,
                        args=(chunk, 'test'))
        thread.start()
コード例 #18
0
def update_partners_resending_due_interval(project):
    # Datei mit den Lieferanten eines Typs laden
    partners = load_identifier_list_of_type(project)

    # alle Lieferanten durchgehen
    for partner in partners:

        partner_json = get_partner(partner)
        # Prüfen, ob die Abfrage erfolgreich war
        if partner_json is not None:

            try:
                iso_details = partner_json['partner_details'][
                    'profile_details']['iso_details']
                iso_details['resending_overdue_message_interval'] = 21
            except KeyError:
                logging.error('no iso details for partner {}'.format(partner))
            update_partner(partner_json)
コード例 #19
0
def correct_capizalization_in_symbols(project):
    # Datei mit den Lieferanten eines Typs laden
    partners = load_identifier_list_of_type(project)

    # alle Lieferanten durchgehen
    for partner in partners:
        partner_json = get_partner(partner)

        # Prüfen, ob die Abfrage erfolgreich war
        if partner_json < 300:
            try:
                symbol = partner_json['partner_details']['profile_details'][
                    'iso_details']['iso_symbol']
                symbol = symbol.replace('DE-', '')
                symbol = symbol.capitalize()
                symbol = 'DE-' + symbol
                partner_json['partner_details']['profile_details'][
                    'iso_details']['iso_symbol'] = symbol

            except KeyError:
                logging.error('no iso details for partner {}'.format(partner))
            update_partner(partner)
コード例 #20
0
def update_partners(project):
    # Datei mit den Lieferanten eines Typs laden
    partners = load_identifier_list_of_type(project)

    # alle Lieferanten durchgehen
    for partner in partners:
        logging.info('processing partner {}'.format(partner))

        partner_json = get_partner(partner)
        if partner_json is not None:
            # Dieser boolean entscheidet, ob der Code des Partners geändert wurde.
            changed_code = False
            try:
                # die ISO-Details auslesen
                iso_details = partner_json['partner_details'][
                    'profile_details']['iso_details']
                # den Server setzen
                iso_details['ill_server'] = 'zfl2-test.hbz-nrw.de'
                # den Port setzen
                iso_details['ill_port'] = '33242'
                # das Resending overdue message interval setzen
                iso_details['resending_overdue_message_interval'] = 21
                # das iso-Symbol auslesen
                iso_symbol = iso_details['iso_symbol']
                # falls noch kein DE- im Symbol ist, dieses ergänzen
                if 'DE-' in iso_symbol:
                    iso_symbol = iso_symbol.replace('DE-', '')
                    iso_symbol = iso_symbol.capitalize()
                    iso_symbol = 'DE-' + iso_symbol
                else:
                    iso_symbol = 'DE-' + partner.capitalize()
                # ggf. die Schrägstriche entfernen
                iso_symbol = iso_symbol.replace("/", "-")
                # den code entsprechend ändern und den boolean entsprechend setzen
                # if (partner_json['partner_details']['code'] == iso_symbol.upper()):
                changed_code = True
                logging.debug('changing code from {} to {}'.format(
                    iso_symbol.upper(), iso_symbol))
                partner_json['partner_details']['code'] = iso_symbol
                iso_details['iso_symbol'] = iso_symbol
                logging.debug('set iso symbol for partner {} to {}'.format(
                    partner, iso_symbol))
                changed_code = True
                name = partner_json['partner_details']['name']
                # if '(DE-' not in name:
                #    name = name.split(' (')[0] + ' (' + iso_symbol + ')'
                # else:
                #    name = name.replace(iso_symbol.upper(), iso_symbol)
                if 'DE-' not in name:
                    name = iso_symbol + ' (' + name.split(' (')[1]
                else:
                    name = name.replace(iso_symbol.upper(), iso_symbol)

                partner_json['partner_details']['name'] = name
            except KeyError:
                logging.error('no iso details for partner {}'.format(partner))

            # generelle Partner details setzen
            partner_details = partner_json['partner_details']
            partner_details['borrowing_supported'] = True
            partner_details['lending_supported'] = True
            partner_details['borrowing_workflow'] = 'DEFAULT_BOR_WF'
            partner_details['lending_workflow'] = 'DEFAULT_LENDING_WF'

            # Adressen durchgehen, alle bis auf die preferred löschen
            for address in partner_json['contact_info']['address']:
                logging.debug('is preferred address ? {}'.format(
                    address['preferred']))
                if not address['preferred']:
                    logging.debug('removing non-preferred address')
                    partner_json['contact_info']['address'].remove(address)

            # E-Mails durchgehen, alle bis auf die preferred löschen, die preferred zusätzlich in den iso-details eintragen
            for email in partner_json['contact_info']['email']:
                logging.debug('is preferred email ? {}'.format(
                    email['preferred']))
                if email['preferred']:
                    logging.debug(
                        'setting iso-email address to preferred address')
                    partner_json['partner_details']['profile_details'][
                        'iso_details']['email_address'] = email[
                            'email_address']
                else:
                    logging.debug('removing non-preferred email-address')
                    partner_json['contact_info']['email'].remove(email)

            # Update der Adressdaten anhand von Google Maps Ergebnissen
            # google_data = get_google_data(address_block)
            # if google_data is not None:
            #    for address_data in google_data['result']['address_components']:
            #        if 'country' in address_data['types']:
            #            if address_data['short_name'] == 'DE':
            #                partner_json['contact_info']['address'][0]['country'] = {"value": "DEU"}
            #        elif 'locality' in address_data['types']:
            #            partner_json['contact_info']['address'][0]['city'] = address_data['long_name']

            # wenn der Partner code ersetzt wurde, kein Update des Partners durchführen, sondern einen neuen Partner anlegen
            if changed_code:
                # URL für POST (ohne Partner-Code)
                save_new_partner(partner_json)

            # wenn der Partner-Code nicht ersetzt wurde, ein einfaches Update durchführen.
            else:
                update_partner(partner_json)
コード例 #21
0
def delete_partners(project):
    partners = load_identifier_list_of_type(project)
    for partner in partners:
        delete_partner(partner)
コード例 #22
0
def set_pin_pw_and_addresses_for_chunk(chunk, set_passphrase=False):
    users_already_set = load_identifier_list_of_type("users_already_set")
    for user in chunk:
        user = user.strip()
        if user == '':
            continue
        user_json = get_user(user)
        if user_json is not None:
            user_json = clean_title(user_json)
            if user_json['primary_id'] in users_already_set:
                logging.info("user {} already set.".format(user))
                continue
            first_name = ''
            try:
                first_name = user_json['first_name']
            except KeyError:
                logging.warning("no first name given")
            last_name = user_json['last_name']
            gender = user_json['gender']['value']
            title = user_json['user_title']['value']
            pin_new = False
            try:
                user_json['pin_number'] = calculate_standard_pin(
                    user_json['birth_date'])
                pin_new = True
            except:
                logging.warning(
                    'could not load birthday for user {}'.format(user))
            passphrase = ''
            if set_passphrase:
                passphrase = ''.join(
                    random.SystemRandom().choice(string.ascii_uppercase +
                                                 string.ascii_lowercase +
                                                 string.digits)
                    for _ in range(12))
                user_json['password'] = passphrase
            email = ''
            if len(user_json['contact_info']['email']) > 0:
                for email in user_json['contact_info']['email']:
                    if email['preferred'] == True:
                        email = email['email_address']

            if len(user_json['contact_info']['address']) > 0:
                for address in user_json['contact_info']['address']:
                    changed = False
                    postal_code_changed = False
                    if address['preferred']:
                        address_lines = []
                        for i in range(1, 6):
                            address_lines.append(address['line' + str(i)])
                        for address_item in list(address_lines):
                            if address_item is None:
                                address_lines.remove(address_item)
                            elif postalcode_regexp.match(address_item):
                                changed = True
                                postal_code_changed = True
                                address[
                                    'postal_code'] = postalcode_regexp.findall(
                                        address_item)[0]
                                address['city'] = postalcode_regexp.split(
                                    address_item)[2].strip()
                                address_lines.remove(address_item)
                            elif 'Herr' in address_item:
                                changed = True
                                address_lines.remove(address_item)
                            elif 'Frau' in address_item:
                                changed = True
                                address_lines.remove(address_item)
                        if postal_code_changed:
                            logging.info(
                                'rearranged postal code for user {}'.format(
                                    user))
                        else:
                            logging.info(
                                'no rearrangement of postal code for user {}'.
                                format(user))
                        if changed:
                            for i in range(0, 5):
                                if i < len(address_lines):
                                    address['line' +
                                            str(i + 1)] = address_lines[i]
                                else:
                                    address['line' + str(i + 1)] = ''
                        else:
                            logging.info(
                                'no address changes for user {}'.format(user))
                    else:
                        logging.debug('not preferred address')
            else:
                logging.warning('no addresses given for user {}'.format(user))
            update_success = update_user(user_json)

            # Prüfen, ob Anfrage erfolgreich war und alles in die Log-Datei schreiben
            if update_success:
                logging.info(
                    'succesfully updated user | {} | {} | {} | {} | {} | {} | {} | {}'
                    .format(user, gender, title, first_name, last_name, email,
                            pin_new, passphrase))
            else:
                logging.warning('problem updating user {}'.format(user))
        else:
            logging.warning('could not retrieve user {}'.format(user))
コード例 #23
0
import os

import requests

from service.list_reader_service import load_identifier_list_of_type

# Script that takes a list of Ids from the data/input folder and replaces the public record_type by staff ones

if __name__ == '__main__':
    vendors = load_identifier_list_of_type('vendor')
    api_key = os.environ['ALMA_ACQ_API_KEY']
    total = 0
    not_in_alma = 0
    for vendor in vendors:
        url = 'https://api-eu.hosted.exlibrisgroup.com/almaws/v1/acq/vendors/{}?apikey={}'.format(vendor, api_key)
        get = requests.get(url=url, headers={'Accept': 'application/json'})
        get.encoding = 'utf-8'
        if get.status_code == 200:
            print('vendor {} found in alma'.format(vendor))
        else:
            not_in_alma = not_in_alma + 1
コード例 #24
0
def with_set():
    marks = list_reader_service.load_identifier_list_of_type("p2e")
    marks = list(dict.fromkeys(marks))
    list_reader_service.save_identifier_list_of_type('p2e', marks, 'p2e')
コード例 #25
0
def set_liable_for_vat():
    # Datei mit den Lieferanten mit suffix finance laden
    vendors = load_identifier_list_of_type('vendors_finance')

    # API-Key aus den Umgebungsvariablen lesen
    api_key = os.environ['ALMA_SCRIPT_API_KEY']

    # alle Lieferanten durchgehen
    for vendor_line in vendors:

        time.sleep(0.05)

        # Die URL für die API zusammensetzen
        url = '{}acq/vendors/{}?apikey={}'.format(alma_api_base_url,
                                                  vendor_line, api_key)

        # GET-Abfrage ausführen
        get = requests.get(url=url, headers={'Accept': 'application/json'})

        # Kodierung auf UTF-8 festsetzen
        get.encoding = 'utf-8'

        # Prüfen, ob die Abfrage erfolgreich war (Status-Code ist dann 200)
        if get.status_code == 200:

            # Den Inhalt der Antwort als Text auslesen
            info = get.text

            # In dem Text den Typ auf Inactive ändern
            payload = info.replace('"liable_for_vat":false,',
                                   '"liable_for_vat":true,')

            if '"country":{"value":"DE"' in payload:
                payload = payload.replace(
                    '"country":{"value":"DE","desc":""}',
                    '"country":{"value":"DEU","desc":"Germany"}')

            if '"country":{"value":"Germany"' in payload:
                payload = payload.replace(
                    '"country":{"value":"Germany","desc":""}',
                    '"country":{"value":"DEU","desc":"Germany"}')

            if '"country":{"value":"Deutschland"' in payload:
                payload = payload.replace(
                    '"country":{"value":"Deutschland","desc":""}',
                    '"country":{"value":"DEU","desc":"Germany"}')

            if '"country":{"value":"Schweiz"' in payload:
                payload = payload.replace(
                    '"country":{"value":"Schweiz","desc":""}',
                    '"country":{"value":"CHE","desc":"Germany"}')

            if '"country":{"value":"Japan"' in payload:
                payload = payload.replace(
                    '"country":{"value":"Japan","desc":""}',
                    '"country":{"value":"JPN","desc":"Germany"}')

            if '"country":{"value":"Belgien"' in payload:
                payload = payload.replace(
                    '"country":{"value":"Belgien","desc":""}',
                    '"country":{"value":"BEL","desc":"Germany"}')

            # Update als PUT-Abfrage ausführen. URL ist die gleiche, Encoding ist wieder utf-8, Inhalt ist JSON
            update = requests.put(url=url,
                                  data=payload.encode('utf-8'),
                                  headers={'Content-Type': 'application/json'})

            # Antwort-Encoding ist wieder UTF-8
            update.encoding = 'utf-8'

            # Prüfen, ob Anfrage erfolgreich war und alles in die Log-Datei schreiben
            if update.status_code == 200:
                logging.info(
                    'succesfully updated liable for vat for vendor {}'.format(
                        vendor_line))
            else:
                logging.warning(
                    'problem updating liable for vat for vendor {}:{}'.format(
                        vendor_line, update.text))
        else:
            logging.error(get.text)
コード例 #26
0
def deactivate_non_used_vendors(type):
    # Datei mit den Lieferanten eines Typs laden
    vendors = load_identifier_list_of_type('vendor_' + type)

    # API-Key aus den Umgebungsvariablen lesen
    api_key = os.environ['ALMA_SCRIPT_API_KEY']

    # alle Lieferanten durchgehen
    for vendor_line in vendors:

        # Die URL für die API zusammensetzen
        url = '{}acq/vendors/{}/po-lines?apikey={}'.format(
            alma_api_base_url, vendor_line, api_key)

        # Die GET-Abfrage ausführen
        get_list = requests.get(url=url,
                                headers={'Accept': 'application/json'})

        # Die Kodierung der Antwort auf UTF-8 festlegen
        get_list.encoding = 'utf-8'

        # Prüfen, ob die Abfrage erfolgreich war (Status-Code ist dann 200)
        if get_list.status_code == 200:

            # Die Antwort als Json auslesen, den Wert aus dem Feld 'total_record_count' auslesen und prüfen, ob dieser
            # 0 ist (= keine Rechnungen am Lieferanten)
            if (get_list.json()['total_record_count'] == 0):

                # Die URL für die API zusammensetzen
                url = 'acq/vendors/{}?apikey={}'.format(
                    alma_api_base_url, vendor_line, api_key)

                # Die GET-Abfrage ausführen
                get = requests.get(url=url,
                                   headers={'Accept': 'application/json'})

                # Die Kodierung der Antwort auf UTF-8 festlegen
                get.encoding = 'utf-8'

                # Prüfen, ob die Abfrage erfolgreich war (Status-Code ist dann 200)
                if get.status_code == 200:

                    # Die Antwort als json auslesen, den Wert aus dem Feld 'status/value' auslesen und Prüfen, ob dieser
                    # 'ACTIVE' ist (aktiver Lieferant)
                    if get.json()['status']['value'] == 'ACTIVE':

                        # den Inhalt der Antwort als Text auslesen
                        info = get.text

                        # den Status-Wert "Active" durch "Inactive" ersetzen
                        payload = info.replace(
                            '"status":{"value":"ACTIVE","desc":"Active"}',
                            '"status":{"value":"INACTIVE","desc":"Inactive"}')

                        # Update als PUT-Abfrage ausführen. URL ist die gleiche, Encoding ist wieder utf-8, Inhalt ist JSON
                        update = requests.put(
                            url=url,
                            data=payload.encode('utf-8'),
                            headers={'Content-Type': 'application/json'})

                        # Die Kodierung der Antwort auf UTF-8 festlegen
                        update.encoding = 'utf-8'

                        # Prüfen, ob Anfrage erfolgreich war und alles in die Log-Datei schreiben
                        if update.status_code == 200:
                            logging.info(
                                'succesfully updated vendor {}'.format(
                                    vendor_line))
                        else:
                            logging.error(
                                'problem updating vendor {}:{}'.format(
                                    vendor_line, update.text))
                    else:
                        logging.info('account {} is already inactive'.format(
                            vendor_line))
                else:
                    logging.error(get.text)
            else:
                logging.warning('account {} still has {} po-lines'.format(
                    vendor_line,
                    get_list.json()['total_record_count']))
        else:
            logging.error(get_list.text)
コード例 #27
0
def fill_financial_code():
    # Datei mit den Lieferanten mit suffix finance laden
    vendors = load_identifier_list_of_type('vendors_finance')

    # API-Key aus den Umgebungsvariablen lesen
    api_key = os.environ['ALMA_SCRIPT_API_KEY']

    # alle Lieferanten durchgehen
    for vendor_line in vendors:

        time.sleep(0.05)

        # Die URL für die API zusammensetzen
        url = '{}acq/vendors/{}?apikey={}'.format(alma_api_base_url,
                                                  vendor_line, api_key)

        # GET-Abfrage ausführen
        get = requests.get(url=url, headers={'Accept': 'application/json'})

        # Kodierung auf UTF-8 festsetzen
        get.encoding = 'utf-8'

        # Prüfen, ob die Abfrage erfolgreich war (Status-Code ist dann 200)
        if get.status_code == 200:

            # Den Inhalt der Antwort als JSON-Objekt auslesen
            get_json = get.json()

            try:
                if get_json['financial_sys_code'] != '':
                    logging.info(
                        'financial code already set for vendor {}'.format(
                            vendor_line))
                    # den SAP-Kreditoren-Wert aus dem Feld 'additional_code' auslesen
            except KeyError:
                logging.debug(
                    'no financial code set for vendor {}'.format(vendor_line))
            try:
                financial_code = get_json['additional_code']
            except KeyError:
                logging.error(
                    'no additional code in vendor {}'.format(vendor_line))
                continue
            # den ausgelesenen Wert in das Feld 'financial_sys_code' schreiben
            get_json['financial_sys_code'] = financial_code

            # get_json['additional_code'] = ""

            for index, currency in enumerate(get_json['currency']):
                if currency['value'] == 'DEM':
                    get_json['currency'].pop(index)

            for address in get_json['contact_info']['address']:
                if address['country']['value'] == 'Deutschland':
                    address['country']['value'] = 'DEU'

            # den aktualisierten Lieferanten per PUT-Abfrage nach Alma schreiben (gleiche url wie bei der Abfrage,
            # das JSON-object wird über json.dumps in einen Text umgewandelt.
            update = requests.put(url=url,
                                  data=json.dumps(get_json),
                                  headers={'Content-Type': 'application/json'})

            # die Kodierung der Antwort setzen
            update.encoding = 'utf-8'

            # Prüfen, ob die Abfrage erfolgreich war (Status Code 200) und alles in die Log-Datei schreiben
            if update.status_code == 200:
                logging.info(
                    'succesfully updated vendor {}'.format(vendor_line))
            else:
                logging.error('problem updating vendor {}:{}'.format(
                    vendor_line, update.text))

        else:
            logging.error(get.text)