Skip to main content

A Python 3 module to cope with ISOC-AMS.

Project description

isoc-ams

A Python Interface to access the 'Advanced Members Administration System' (AMS) of the 'Internet Society' (ISOC). This is especially useful for ISOC Chapter Admins who want to synchronize their own Chapter Database with AMS (semi)automatically.

After 10 years+ of sorrow, millions minutes of waiting for answers from the AMS web interface, tons of useless clicks, many (in fact) rejected requests to provide an API access: the author decided to build an API himself. Even if it might not be more than a demonstrator for the functionality needed. Anyhow (see below): for now it is running on a weekly basis doing a great job in avoiding manual work.

Unfortunately the constraints are severe:

  • access had to be through the web interface since this is the only interface provided. As a consequence it is slow, sometimes unreliable and hard to implement. At least there are working implementations of the "W3C web driver" recommendation. One of them is Selenium used for this project.
  • the existing web interface is far from being stable or guaranteed. So changes to the web interface might spoil the whole project. There is great chance that few weeks from now a new "super duper" AMS will be announced and as always after these announcements things will get worse.
  • tests are close to impossible. There is no such thing as a TEST AMS.

Is there a possible good exit? Well, maybe some day soon - in 10 or 20 years if ISOC still exists - there will be an API provided by ISOC that makes this project obsolete. Or at least may be an all-mighty AI will step in. Let's dream on!

Status quo: after some experiments with timings isoc-ams seems to run fairly stable for now. The main problem: it takes a lot of time. Not so much an issue if you run it unattended.

Features

AMS maintains two main Lists that are relevant for the operation of this interface:

  • a list of ISOC members registered as members of the Chapter
  • a list of ISOC members that applied for a Chapter membership.

Consequently isoc-ams provides methods for the following tasks:

  1. read list of ISOC members registered as Chapter members
  2. read list of ISOC members that applied for a Chapter membership
  3. approve ISOC AMS applications
  4. deny ISOC AMS applications
  5. delete members from ISOC AMS Chapters Member list
  6. add members to ISOC AMS Chapters Member list (Chapter admins are not authorized to do this. So the author suggests to write a mail to ams-support.)

Don't forget: it takes time and you may see many kinds of errors. Often the cure is "try again later". Any expectation of flawless is not appropriate. Anyhow, after running it some time now it seems to work better than expected. So here we go:

Preparing

Prerequisites

isoc-ams was tested under Linux (Ubuntu 22.04) and Windows 11.

While rather stable under Linux, Windows 11 produced mixed results. Under powershell you may need to set the ExecutionPolicy

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Firefox or Chrome Webbrowser with Webdriver (usually included) is required.

A full installation of Python 3.9+ is required.

Installation

Install (or update) isoc-ams with pip.

  python -m pip install -U isoc-ams

Recommended to use a virtual environment (venv).

Running isoc_ams

Choosing a Webdriver (deprecated)

You may select a Webdriver of your choice (provided it is one of "firefox" or "chrome") by setting an environment variable ISOC_AMS_WEBDRIVER e.g.:

ISOC_AMS_WEBDRIVER=firefox

Recommended (and default) is "firefox".

Start execution of the module

So this happens if we call the module with:

python -m isoc_ams

Output:

Username:xyz
Password: 

*********************************************************** 
2025-07-13 19:25:54 - INFO - START: Webdriver is firefox 
*********************************************************** 

2025-07-13 19:25:54 - INFO - logging in 

************************************************************* 
2025-07-13 19:25:59 - ERROR - Invalid username or password. 
************************************************************* 

OK, probably your fault. After fixing:

Username: xxx
Password: 

*********************************************************** 
2025-07-13 19:26:27 - INFO - START: Webdriver is firefox 
*********************************************************** 

2025-07-13 19:26:27 - INFO - logging in 
2025-07-13 19:26:45 - INFO - Now on Chapter Leader portal 


2025-07-13 19:26:45 - INFO - start build members list 
2025-07-13 19:27:36 - INFO - members list finished /  59 collected 


2025-07-13 19:27:36 - INFO - start build pending applications 
2025-07-13 19:27:50 - INFO - Pending applications list finished /  8 collected 


*************************************** 
2025-07-13 19:27:50 - INFO - MEMBERS 
*************************************** 
1 22158 ...
2 ...
...

**************************************************** 
2025-07-13 19:27:50 - INFO - PENDING APPLICATIONS 
**************************************************** 
1 2323 ...
2 ...
...

As you can see from the time stamps: building the lists is rather tedious. And finding all required info is a bit tricky sometimes.

Logging

Since crazy things may happen it is important to keep track of what is going on. So ISOC_AMS lets you know what it is doing by providing a logfile. With the option --debug you will get a more detailed log. Logs usually go to stdout.

Running with head

Normally isoc_ams won't show any browser output - running headless. To do debugging it might useful to follow the activities in the browser. If you call isoc_ams with a -h option like

python -m isoc_ams -h

the browser will open and you can follow all activities real time.

User input and Dryrun

An argument -i tells the module that there will be (or is) input available with actions to execute. An argument -d tells isoc_ams to make a dry run. Actions will be computed but not executed.

Again an example:

python -m isoc_ams -i -d

Output:

Username: xxx
Password: 

****************************************************************** 
2025-07-15 10:35:57 - INFO - START DRYRUN: Webdriver is firefox 
*****************************************************************

2025-07-15 10:35:57 - INFO - logging in 
2025-07-15 10:36:12 - INFO - Now on Chapter Leader portal 


2025-07-15 10:36:12 - INFO - start build members list 
2025-07-15 10:37:03 - INFO - members list finished /  59 collected 


2025-07-15 10:37:03 - INFO - start build pending applications 
2025-07-15 10:37:17 - INFO - Pending applications list finished /  9 collected 


*************************************** 
2025-07-15 10:37:17 - INFO - MEMBERS 
*************************************** 
1 2217734 Johannes Piesepampel self@piesepampel.com
...

**************************************************** 
2025-07-15 10:37:17 - INFO - PENDING APPLICATIONS 
**************************************************** 
1 23232 Franz Piesepampel franz@piesepampel.com 2025-01-22
2 22556 Abdul Piesepampel abdul@piesepampel.com 2025-03-21
...
READING COMMANDS:

deny 23232 22556 123

2025-07-15 10:38:17 Denied 23232 Franz Piesepampel
2025-07-15 10:38:17 Denied 22556 Abdul Piesepampel
*******************************************************************************
2025-07-15 10:38:17 ISOC-ID 123 is not in pending applications list
*******************************************************************************

delete 2217734

2025-07-15 10:38:59 Deleted 2217734 Johannes Piesepampel
2025-07-15 10:37:17

The following commands are available:

  • deny (followed by a comma or space separated list of ISOC-IDs): deny Chapter membership for these applicants
  • approve (followed by a comma or space separated list of ISOC-IDs): approve Chapter membership for these applicants
  • delete (followed by a comma or space separated list of ISOC-IDs): delete these members from the Capter members list

Using the API

isoc_ams unleashes its full power when used as API to make things happen without human intervention. Check the file "isoc_de_ams_main.py" as an example for fully automatic synchronizing of local membership administration with AMS.

Here the output:


*********************************************************** 
2025-07-15 14:13:30 - INFO - START: Webdriver is firefox 
*********************************************************** 

2025-07-15 14:13:36 - INFO - logging in 
2025-07-15 14:13:53 - INFO - Now on Chapter Leader portal 


2025-07-15 14:13:53 - INFO - start build members list 
2025-07-15 14:14:44 - INFO - members list finished /  59 collected 


2025-07-15 14:14:44 - INFO - start build pending applications 
2025-07-15 14:14:57 - INFO - Pending applications list finished /  8 collected 

2025-07-15 14:14:57 - INFO - Pending Applications: 

   the following pending applications will be approved: 
         ...
         
   the following pending applications will be denied: 
         ...

   the following pending applications will be invited: 
         ...

   the following pending applications will be waiting: 
         ...

2025-07-15 14:14:57 - INFO - Members: 

   the following members will be deleted from AMS: 
         ...

   the following members are not registered Chapter members with AMS: 
         ...

   the following locally registered members are in sync with AMS: 
         ... 

2025-07-15 14:14:57 - INFO - start delete ...
2025-07-15 14:15:10 - INFO - done 
2025-07-15 14:15:10 - INFO - Deleted 233658 ...


************************************************************************* 
2025-07-15 14:15:10 - INFO - Check if actions ended up in AMS database 
************************************************************************* 
2025-07-15 14:15:10 - INFO - we have to read the AMS Database tables again to find deviations from expected result after actions :( 
 

2025-07-15 14:15:10 - INFO - start build members list 
2025-07-15 14:15:56 - INFO - members list finished /  59 collected 


2025-07-15 14:15:56 - INFO - start build pending applications 
2025-07-15 14:16:06 - INFO - Pending applications list finished /  8 collected 

2025-07-15 14:16:06 - INFO - everything OK

See file isoc_ams.html for doc on the API interface.

Version 1.0 released (2026-03-13):

###Summary of Changes:

isoc-ams has now the following (additional) options:
  -h  --head            show browser window during run
  -i  --input           read commands from stdin
  -d  --dryrun          just run without modifying any data
      --debuglog DEBUGLOG   file for detailed log
      --logfile LOGFILE     file for log
  -e  --export EXPORTfile   output AMS data to this JSON file and exit
  -o  --offline OFFLINEfile read (fake) AMS data from this JSON file and run dry (saves a lot of time when testing)
  -u  --user USER           ISOC.ORG login - your user_id
  -p  --password PASSWORD   ISOC.ORG login - your password
  --driver {firefox,chrome} Selenium driver
  --help                Show this help

Example Output of --export EXPORTfile option:

{
    "members": {
        "134596": {
            "action link": "https://community.internetsociety.org/leader/s/detail/xxx",
            "email": "patrick@patfab.net",
            "first name": "xxx",
            "last name": "xxx"
        },
        "139779": {
            "action link": "https://xxx",
            "email": "xxx",
            "first name": "xxx",
            "last name": "xxx"
        },
        "155522": {
            "action link": "https://xxx",
            "email": "xxx",
            "first name": "xxx",
            "last name": "xxx"
        },
     ...
    }
    "pendings": {
        "2352": {
            "action link": "https://xxx",
            "date": "2026-03-07 00:00:00",
            "email": "xxxxxxx",
            "name": "xxxxxxx"
        },
        "2360": {
            "action link": "https://xxx",
            "date": "2026-03-12 00:00:00",
            "email": "xxx",
            "name": "xxx"
        }
    }
}

Now deprecated (use --driver DRIVER option instead): You may select a Webdriver of your choice (provided it is one of "firefox" or "chrome") by setting an environment variable ISOC_AMS_WEBDRIVER e.g.:

ISOC_AMS_WEBDRIVER=firefox

To send an E-Mail to AMS team ref. missing CHapter members in AMS is no longer suggested.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

isoc_ams-1.0.1.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

isoc_ams-1.0.1-py2.py3-none-any.whl (16.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file isoc_ams-1.0.1.tar.gz.

File metadata

  • Download URL: isoc_ams-1.0.1.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for isoc_ams-1.0.1.tar.gz
Algorithm Hash digest
SHA256 f84c005d028de13689bda791403f02001bf87182f87c25aa97238d23311f04ae
MD5 800193f5a643c9e911caa0e50bdc0f2d
BLAKE2b-256 e8c0fc8ac1e53677764a256459df93908c7a989dc05922d642d35ef49108e1ea

See more details on using hashes here.

File details

Details for the file isoc_ams-1.0.1-py2.py3-none-any.whl.

File metadata

  • Download URL: isoc_ams-1.0.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for isoc_ams-1.0.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 2d6e5a61ac25362076658ebb4ecd4737ce8e53c430eebf37b0b34b4602d2f0bc
MD5 b1143afe0a5ac5e2d7f8f813f2fa4738
BLAKE2b-256 a6094654fb29536f413001bc0b3dc7c509158a76264ae0a76421c5b328febe21

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page