object command mapper: Python library for map command line software to Python object.
Project description
OCM: Object Command Mapping
I often need to call command line software in Python scripts, usually through subprocess, for example:
import subprocess
subprocess.run(['ls','-l','/Users/dev'])
The following points of using subprocess make me feel inconvenient:
- Need to determine the order of the parameters to determine the order of the list
- No parameter verification
- It is not convenient to get parameters, for example:
['ls','-l','/Users/dev'], I want to get the directory
In response to the above pain points, I implemented OCM. OCM is named after ORM. When we use Python for database query, we often need to do this:
cursor.execute('SELECT xxx FROM xxx WHERE xxx')
print(cursor.fetchone()[1])
Very inconvenient, you can use ORM to query like this:
xxx = XXX.objects.filter(xxx=xxx).first()
print(xxx.xxx)
So for OCM, what I want to achieve is to run a command like this:
ls = LsCommand(is_long=True, directory='.')
ls()
Installation
pip install python-ocm
Philosophy
Like click, OCM abstracts command-line parameters into two types:
Option, can be specified by-l,--long,-o foo.txt, etc.Argument, can only pass the value directly, no key
For example: in ls -l /Users/dev:
-lisOption(here there is no value after-l, it is calledflag)/Users/devisArgument
Usage
from ocm import Command, Option, Argument
class LS(Command):
is_long = Option('-l', name='is_long', is_flag=True, required=False)
directory = Argument(name='directory', required=True)
class Meta:
exe ='ls'
ls = LS(is_long=True, directory='/Users/dev')
print(ls.is_long)
print(ls.directory)
returncode, stdout = ls()
print(returncode)
print(stdout)
Parameter Type
OCM built-in parameter types:
StringParamTypeIntegerParamTypeFloatParamTypeChoicesParamType
Instructions:
from ocm import Command, Option, Argument, IntegerParamType
class Head(Command):
number = Option('-n', name='number', param_type=IntegerParamType(), required=False)
file = Argument(name='file')
class Meta:
exe ='head'
head = Head(number=10, file='ocm.py')
returncode, stdout = head()
Custom parameter type:
from ocm import ParamType
class MyParamType(ParamType):
def convert(self, value, param, ctx):
pass
def show(self, value):
pass
The convert method is responsible for converting the incoming data into the correct data:
value, the incoming dataparam, the parameter objectctx, all other incoming parameters
The show method is responsible for converting the data into a string to run on the command line:
value, the incoming data, generally the result of conversion by the convert method
Callback
The callback function can perform additional verification and conversion based on the data passed in by the user.
from ocm import Command, Option, Argument, IntegerParamType
def add_one(value, param, ctx):
if value is None:
return None
return value + 1
class Head(Command):
number = Option(
'-n', name='number', param_type=IntegerParamType(), required=False, callback=add_one
)
file = Argument(name='file')
class Meta:
exe ='head'
head = Head(number=10, file='ocm.py')
returncode, stdout = head()
API
Option
__init__(self, key, is_flag=False, default=None, param_type=None, required=None, callback=None, multiple=False)
parameter:
-
key, the key of theOptionwhen splicing into a command line, for example,-l -
name, the name of the parameter -
is_flag, whether this parameter isflag, see the description in the concept section, the default isFalse -
default, the default value of the parameter -
param_type, the type of the parameter, see the description of the parameter type -
required, is it necessary? -
callback, some parameters need to be converted according to the input value, you can customize the callback function, see the description of the callback function section -
multiple, whether this parameter will be passed in multiple, for example,ls -l /Users/dev /Users/dev/Downloads/,directoryparameter is passed twice -
process_value(self, value, ctx)
Verify value according to the rules, and return the verified result:
value, the value to be verifiedctx, the value of other parameters passed in at the same time, used for the verification of the parameter
Argument
__init__(self, is_flag=False, default=None, param_type=None, required=None, callback=None, multiple=False)
parameter:
-
name, the name of the parameter -
default, the default value of the parameter -
param_type, the type of the parameter, see the description of the parameter type -
required, is it necessary? -
callback, some parameters need to be converted according to the input value, you can customize the callback function, see the description of the callback function section -
multiple, whether this parameter will be passed in multiple, for example,ls -l /Users/dev /Users/dev/Downloads/,directoryparameter is passed twice -
process_value(self, value, ctx)
Verify value according to the rules, and return the verified result:
value, the value to be verifiedctx, the value of other parameters passed in at the same time, used for the verification of the parameter
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python-ocm-0.0.5.tar.gz.
File metadata
- Download URL: python-ocm-0.0.5.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.4.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c91afb5bd81be6ac93268771f10e9d11543523e04f4e661e97d65a36627493b
|
|
| MD5 |
3e1b029535dfcbeb9213e1d5f72bde81
|
|
| BLAKE2b-256 |
13d58b4f8416b708b4eb3a9655d1dcef18aa08bcb14e964fe8ee34c1a1ec4c10
|
File details
Details for the file python_ocm-0.0.5-py3-none-any.whl.
File metadata
- Download URL: python_ocm-0.0.5-py3-none-any.whl
- Upload date:
- Size: 6.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.4.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.7.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ecb3fa0874a340ce26e0265b8f50845423748f917d47ffa4b82c806e13d543f
|
|
| MD5 |
59f612ce1b9f258e4fea60ae9847ada3
|
|
| BLAKE2b-256 |
d829922648f41e3020539116a96eb71bcd458d54e7191227ccc6ff7bee1a7e0a
|