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
tiny multi-threaded socks4 server implemented in python2

tiny, multi-threaded socks4a server implemented in python2.

4 Sep 21, 2022
Burgeramt-appointments-websockets - Fetch Bürgeramt appointments and broadcast them via websockets

Bürgeramt appointment finder This server looks for Bürgeramt appointment every f

74 Dec 19, 2022
Socket.IO integration for Flask applications.

Flask-SocketIO Socket.IO integration for Flask applications. Installation You can install this package as usual with pip: pip install flask-socketio

Miguel Grinberg 4.9k Jan 03, 2023
Tetri5 - Multiplayer Websocket Backend

Tetri5 - Multiplayer Websocket Backend This repository is the backend of the multiplayer portion of the Tetri5 game client. It uses the python websock

Giovani Rodriguez 1 Dec 10, 2022
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
Discord.py Connect to Discord voice call with websocket

Discord.py Connect to Discord voice call with websocket

WoahThatsHot 3 Apr 22, 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
Django Channels HTTP/WebSocket server

daphne Daphne is a HTTP, HTTP2 and WebSocket protocol server for ASGI and ASGI-HTTP, developed to power Django Channels. It supports automatic negotia

Django 1.9k Dec 31, 2022
SocketIO 转发台,保持 botoy 能力和插件功能的同时,透传其接口,以此使用更灵活、生态更好的技术进行开发

bot_sio_transfer SocketIO 转发台,保持 botoy 能力和插件功能的同时,透传其接口,以此使用更灵活、生态更好的技术进行开发 Usage 请参考 botoy 文档接入本插件 Example 考虑一种图文混排场景,如何从复杂结构内快速获取第一张图片的 url ? ( 假设图片

OPQ Open Source Community 3 Oct 18, 2021
Python socket.io server implementation on top of Tornado framework

TornadIO2 Disclaimer Unfortunately, Socket.IO 0.8 branch is abandoned, there are huge amount of bugs and nothing getting fixed. I would suggest to loo

Serge S. Koval 526 Oct 03, 2022
Terminals served by tornado websockets

This is a Tornado websocket backend for the Xterm.js Javascript terminal emulator library. It evolved out of pyxterm, which was part of GraphTerm (as

Project Jupyter 332 Dec 27, 2022
A Security Tool for Enumerating WebSockets

STEWS: Security Testing and Enumeration of WebSockets STEWS is a tool suite for security testing of WebSockets This research was first presented at OW

175 Jan 01, 2023
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
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
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
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
Python framework for AsyncAPI-documented Websocket, PubSub, and other async constructs

asyncapi-eventrouter Work in Progress Write Python code for Event-Driven Architectures! The asyncapi-eventrouter prototype library creates Websocket,

noteable 4 Jan 27, 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
Using python-binance to provide websocket data to freqtrade

The goal of this project is to provide an alternative way to get realtime data from Binance and use it in freqtrade despite the exchange used. It also uses talipp for computing

58 Jan 01, 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