alien.py - Python interface to websocket endpoint of ALICE Grid Services

Overview

PyPI

alien.py - Python interface to websocket endpoint of ALICE Grid Services

Quick containerized testing:
singularity run library://adriansev/default/alienpy:latest [cmd]
or
singularity run oras://registry.cern.ch/asevcenc/alienpy:latest [cmd]

latest usually would point to master but not always.(if desired and needed, request by email a new latest tag)
see here what tags are available and their dates of creation.

The docker images can be found @DockerHub

docker run -it \
--user $(id -u):$(id -g) \
--workdir="/home/$USER" \
--env TMPDIR="${TMPDIR:-/tmp}" \
--volume="/etc/group:/etc/group:ro" \
--volume="/etc/passwd:/etc/passwd:ro" \
--volume="/etc/shadow:/etc/shadow:ro" \
--volume="/home:/home" \
adriansevcenco/alienpy.dock:latest [cmd]

if no cmd is passed, the shell form will start

Basic usage

Can be used as command mode and interactive mode :

  1. Command mode :
    alien.py e.g :
    alien.py pwd
    N.B. command/arguments must be quoted to avoid being interpreted by the shell:
    alien.py 'rm my_alien_dir/*'

  2. Interactive/shell mode e.g :

alien.py
Welcome to the ALICE GRID
support mail: [email protected]

AliEn[asevcenc]:/alice/cern.ch/user/a/asevcenc/ >pwd
/alice/cern.ch/user/a/asevcenc/
AliEn[asevcenc]:/alice/cern.ch/user/a/asevcenc/ >whoami
asevcenc
AliEn[asevcenc]:/alice/cern.ch/user/a/asevcenc/ >
  • For both command and shell mode multiple commands can be issued separated by ;
  • The interactive mode save the command history in ${HOME}/.alienpy_history and it can be navigated with Up/Down keys
  • ! is understood as running into shell whatever command follows
  • | pipe whatever output of AliEn command to a shell command (that follows after the first(only the first) |)

Environment steering

There are a few environment variables that influence the mechanics of the script :

  • JALIEN_TOKEN_CERT, JALIEN_TOKEN_KEY - will overwrite the defaults; they are either full path certificate,key token files OR their respective contents
  • If set the following will be honored: X509_USER_CERT, X509_USER_KEY, X509_CERT_DIR or X509_CERT_FILE
  • ALIENPY_TIMEOUT will change the interval for keep-alive mechanics.
  • ALIENPY_CONNECT_TRIES - default = 3 : number of connect trials
  • ALIENPY_CONNECT_TRIES_INTERVAL - default = 0.5 : seconds between connection trials

For debugging purposes there are a few environment toggles :

  • ALIENPY_JSON - print the unprocessed json message from the server
  • ALIENPY_JSONRAW - print the unprocessed byte stream message from the server

  • ALIENPY_JCENTRAL - it will connect to this server, ignoring any other options
  • ALIENPY_NO_STAGGER - disable staggered parallel host resolution and socket creation (see RFC8305)

  • ALIENPY_DEBUG - detailed debug meesages will be found in ALIENPY_DEBUG_FILE
  • ALIENPY_DEBUG_FILE - set the location of log file
  • ALIENPY_DEBUG_APPEND - is set the output will be appended to the present log file. if not the file will be overwritten.
  • ALIENPY_TIMECONNECT - if set will report time for websocket creation - e.g. ALIENPY_TIMECONNECT=1 alien.py pwd
  • ALIENPY_TIMING - report detailed operation timing in the log file.

DEBUG file copy operations:

  • ALIENPY_KEEP_META - keep the metafile generated for download operations. Can be directly used with xrdcp.
  • XRD_LOGLEVEL='Dump'
  • XRD_LOGFILE=xrdlog.txt

See also the native XRootD environment toggles: docs

Authentication

The authentication process needs the presence of a X509 certificate (enrolled into ALICE VO, see here) and of a CA certificates directory for verification. The default CA location that will be searched is within alice.cern.ch cvmfs repository If not found, the CApath will default to /etc/grid-security/certificates If these locations are not available, one must set X509_CERT_DIR to a valid location

Command usage and examples

The list of available commands can seen with: ? or help
Command help can be listed with: ? command, help command, command -h

Storage related operations

This section refer to any copy to/from grid or file interactions.

cat/more/less will download the target lfn to a temporary file and will act upon it while
vi/nano/mcedit/edit will, after the modification of downloaded temporary, backup the existing lfn, and upload the modified file
The target file upload can support grid specifiers like those described in cp command e.g. edit [email protected]:2,SE1

cp option

cp can take as arguments both files and directories and have the following options:

: select only these files to be copied; N.B. this is a REGEX applied to full path!!! -name : select only these files to be copied; N.B. this is a REGEX applied to a directory or file name!!! -name _string : where verb = begin|contain|ends|ext and string is the text selection criteria. verbs are aditive : -name begin_myf_contain_run1_ends_bla_ext_root N.B. the text to be filtered cannont have underline <_> within!!! -parent : in destination use this to add to destination ; defaults to 0 -a : copy also the hidden files .* (for recursive copy) -j : select only the files created by the job with (for recursive copy) -l : copy only nr of files (for recursive copy) -o : skip first files found in the src directory (for recursive copy) ">
alien.py cp -h
Command format is of the form of (with the strict order of arguments):
cp 
             
               src dst
or
cp 
              
                -input input_file

location prefixes are: file: | file:// | alien: | alien://
if one prefix is specified the other operator is considered of the other kind (no local -> local, or grid->grid operations allowed)
if no prefix is specified, the src will be _first_ checked if local and then if remote.

-input argument is a file with >src dst< pairs

after each src,dst can be added comma separated specifiers in the form of: @disk:N,SE1,SE2,!SE3
where disk selects the number of replicas and the following specifiers add (or remove) storage endpoints from the received list
options are the following :
-h : print help
-f : replace destination file (if destination is local it will be replaced only if integrity check fails)
-P : enable persist on successful close semantic
-cksum : check hash sum of the file; for downloads the central catalogue md5 will be verified;
for uploads (for xrootd client > 4.12.0) a hash type will be negociated with remote and transfer will be validated
-y 
               
                 : use up to the number of sources specified in parallel (N.B. Ignored as it breaks download of files stored in archives)
-S 
                
                  : uses num additional parallel streams to do the transfer. (max = 15)
-chunks 
                 
                   : number of chunks that should be requested in parallel -chunksz 
                  
                    : chunk size (bytes) -T 
                   
                     : number of parralel copy jobs from a set (for recursive copy); defaults to 8 for downloads -noxrdzip: circumvent the XRootD mechanism of zip member copy and download the archive and locally extract the intended member. N.B.!!! for recursive copy (all files) the same archive will be downloaded for each member. If there are problems with native XRootD zip mechanism, download only the zip archive and locally extract the contents for the recursive copy of directories the following options (of the find command) can be used: -glob 
                    
                      : this is the usual AliEn globbing format; N.B. this is NOT a REGEX!!! defaults to all "*" -select 
                     
                       : select only these files to be copied; N.B. this is a REGEX applied to full path!!! -name 
                      
                        : select only these files to be copied; N.B. this is a REGEX applied to a directory or file name!!! -name 
                       
                        _string : where verb = begin|contain|ends|ext and string is the text selection criteria. verbs are aditive : -name begin_myf_contain_run1_ends_bla_ext_root N.B. the text to be filtered cannont have underline <_> within!!! -parent 
                        
                          : in destination use this 
                         
                           to add to destination ; defaults to 0 -a : copy also the hidden files .* (for recursive copy) -j 
                          
                            : select only the files created by the job with 
                           
                             (for recursive copy) -l 
                            
                              : copy only 
                             
                               nr of files (for recursive copy) -o 
                              
                                : skip first 
                               
                                 files found in the src directory (for recursive copy) 
                               
                              
                             
                            
                           
                          
                         
                        
                       
                      
                     
                    
                   
                  
                 
                
               
              
             

., .. are interpreted for all grid names (lfns)
%ALIEN is converted to user AliEn home directory
lfns that don't start with a / will have the current directory appended before being processed

Miscellaneous

The shell prompt

It can show date and/or local directory:

  • prompt date will toggle on/off the date
  • prompt pwd will toggle on/off the local current directory
    For permanent setting the following are env variables are available : ALIENPY_PROMPT_DATE, ALIENPY_PROMPT_CWD
AliEn[asevcenc]:/alice/cern.ch/user/a/asevcenc/ >prompt date
2020-02-07T16:49:05 AliEn[asevcenc]:/alice/cern.ch/user/a/asevcenc/ >

AliEn[asevcenc]:/alice/cern.ch/user/a/asevcenc/ >prompt pwd
AliEn[asevcenc]:/alice/cern.ch/user/a/asevcenc/ local:/home.hdd/adrian/work-GRID/jalien_py >

CWD persistence

Default behaviour is to save (and then restore) the last used CWD.
This bevahiour can be disabled with the env var ALIENPY_NO_CWD_RESTORE


ls aliases

ll, la, lla are aliases to ls -l, ls -a, ls -la


Custom aliases

A fixed file ${HOME}/.alienpy_aliases can be used to define alias=string pairs that will be used(translated) in the usage of alien.py. One can do myalias=cmd1;cmd2;cmd3 and the myalias string will be replaced by it's value when used.


Python shell

term command will open an Python shell within the context of alien.py and with a session object loaded


API usage

see examples directory

Owner
Adrian Sevcenco
Adrian Sevcenco
alien.py - Python interface to websocket endpoint of ALICE Grid Services

alien.py - Python interface to websocket endpoint of ALICE Grid Services Quick containerized testing: singularity

Adrian Sevcenco 6 Dec 14, 2022
Websockify is a WebSocket to TCP proxy/bridge. This allows a browser to connect to any application/server/service. Implementations in Python, C, Node.js and Ruby.

websockify: WebSockets support for any application/server websockify was formerly named wsproxy and was part of the noVNC project. At the most basic l

noVNC 3.3k Jan 03, 2023
WebSocket and WAMP in Python for Twisted and asyncio

Autobahn|Python WebSocket & WAMP for Python on Twisted and asyncio. Quick Links: Source Code - Documentation - WebSocket Examples - WAMP Examples Comm

Crossbar.io 2.4k Jan 04, 2023
WebSocket emulation - Python server

SockJS-tornado server SockJS-tornado is a Python server side counterpart of SockJS-client browser library running on top of Tornado framework. Simplif

Serge S. Koval 854 Nov 19, 2022
WebSocket client for Python

websocket-client The websocket-client module is a WebSocket client for Python. It provides access to low level APIs for WebSockets. All APIs are for s

3.1k Jan 02, 2023
A websocket client for Source Filmmaker intended to trasmit scene and frame data to other applications.

SFM SOCK A websocket client for Source Filmmaker intended to trasmit scene and frame data to other applications. This software can be used to transmit

KiwifruitDev 2 Jan 08, 2022
WebSocket implementation in Python built on top of websockets python library. Similar to Node.js's ws.

ws WebSocket implementation in Python built on top of websockets python library. Similar to Node.js's ws. Basic usage. server.py import ws server = w

AceExpert 7 Jun 27, 2022
Chat app for Django, powered by Django Channels, Websockets & Asyncio

Django Private Chat2 New and improved https://github.com/Bearle/django-private-chat Chat app for Django, powered by Django Channels, Websockets & Asyn

Bearle 205 Dec 30, 2022
Websocket 'broadcast' demo using FastAPI/Starlette

fastapi-websocket-broadcast An example of the familiar 'chat' websocket demo app, implemented in FastAPI / Starlette. Run with uvicorn app:app And th

Kit Thwaite 109 Nov 30, 2022
一款为 go-cqhttp 的正向 WebSocket 设计的 Python SDK

Nakuru Project 一款为 go-cqhttp 的正向 WebSocket 设计的 Python SDK 在 kuriyama 的基础上改动 项目名来源于藍月なくる,图标由せら绘制 食用方法 将 nakuru 文件夹移至 Python 的 Lib/site-packages 目录下。

35 Dec 21, 2022
An IPC based on Websockets, fast, stable, and reliable

winerp An IPC based on Websockets. Fast, Stable, and easy-to-use, for inter-communication between your processes or discord.py bots. Key Features Fast

Black Thunder 5 Aug 09, 2022
Library for building WebSocket servers and clients in Python

What is websockets? websockets is a library for building WebSocket servers and clients in Python with a focus on correctness and simplicity. Built on

Aymeric Augustin 4.3k Jan 04, 2023
Whatsapp Clone using django, django-channels and websocket

whatsapp-clone Whatsapp Clone using django, django-channels and websocket Features : Signup/Login One on One personal chat with other user Some screen

Anshu Pal 14 Dec 25, 2022
Connects microservices through a mesh of websockets

WebMesh WebMesh is a WebSocket based communication library for microservices. It uses a WebSocket server based on wsproto that distributes clients on

Charles Smith 9 Apr 29, 2022
Python Socket.IO server and client

python-socketio Python implementation of the Socket.IO realtime client and server. Version compatibility The Socket.IO protocol has been through a num

Miguel Grinberg 3.2k Dec 31, 2022
wssh ("wish") is a command-line utility/shell for WebSocket inpsired by netcat.

wssh ("wish") is a command-line utility/shell for WebSocket inspired by netcat

Jeff Lindsay 256 Nov 16, 2022
A simple texts communication platform using pygame and sockets.

Python Tchat A simple texts communication platform using pygame and sockets. How to install ? You need a python 3.8.6 server with at least one opened

Yohann Boniface 7 Jan 23, 2022
Async (trio) KuCoin minimal REST API + Websocket

Minimal Async KuCoin REST API + WebSocket using trio Coded by π ([email protected] TG: @p

Pi 2 Oct 23, 2022
Library for easily creating and managing websockets.

Documentation coming in version 0.1.4 GitHub PyPI Discord Features Easy to use with object oriented syntax. Intellisense support with typehints and do

ZeroIntensity 0 Aug 27, 2022
This websocket program is for data transmission between server and client. Data transmission is for Federated Learning in Edge computing environment.

websocket-for-data-transmission This websocket program is for data transmission between server and client. Data transmission is for Federated Learning

9 Jul 19, 2022