# mcclib
**Repository Path**: the_machine/mcclib
## Basic Information
- **Project Name**: mcclib
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-11-15
- **Last Updated**: 2021-04-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Mcclib: 1.8.1
### Table of content
**[Installation](#installation)**
**[T24 related](#T24-related)**
**[Logger](#logger)**
**[Database](#database)**
**[DingTalk Robot](#dingtalk-robot)**
**[Utility](#aws)**
**[AWS](#aws)**
**[Email](#email)**
**[Autobuild](#autobuild)**
## Installation
### From git
```python
pip insatll git+https://github.com/MicroCred/mcclib.git
```
or
```python
git clone https://github.com/MicroCred/mcclib.git
cd mcclib/mcclib
python setup install
# or
pip install .
```
### From AWS ECR
This should be helpful when building other docker images that requires mcclib.
Build target image with multi-stage build:
Example:
```docker
FROM ubuntu
# copy codes from ecr images and install package
COPY --from=078579596025.dkr.ecr.cn-north-1.amazonaws.com.cn/data-analytics/mcclib:latest /mcclib /mcclib
RUN cd /mcclib && pip install .
# do your stuff
...
```
## Usage
### T24 related
1. workday
To get latest workday/holiday from T24.
```python
from mcclib.t24 import workday
from mcclib.utils import config_parser
url = 'T24_SERVICE_URL'
port = 'T24_UT_PORT'
configs = config_parser.get_env_vars([url, port])
t24cal = workday.get_latest_t24cal(
service_url=configs[url],
ut_port=configs[port],
raise_error=True)
```
### Logger
```python
from mcclib.logger import custom_logger
logger = custom_logger.CustomLogger(name='test')
logger.debug('debug')
logger.info('info')
logger.warn('warn')
logger.error('error')
from mcclib.logger import logutils
import logging
# create logger
logger = logutils.get_logger('test-v2', reset=True)
logger.setLevel(logging.DEBUG)
# create handler
ch = logutils.get_console_handler(level=logging.INFO)
fh = logutils.get_file_handler(file_name='test.log', level=logging.DEBUG, kind='timerotating', reset=True)
logger.addHandler(ch)
logger.addHandler(fh)
# log
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
# MultiLogger
logger_config = [
{'name': 'console', 'kind': 'default', 'logger_level': 'debug'},
{'name': 'text', 'kind': 'text-file', 'logger_level': 'debug'}
]
logger = MutiLogger(logger_list=logger_config)
logger.info('test info')
logger.debug('test debug')
logger.to_string()
```
### Database
1. database connection
```python
from mcclib.database.database_connection import DatabaseConnection
redshift = {
'host': '127.0.0.1',
'port': 5439,
'dbname': 'test',
'user': 'admin',
'password': '123'
}
db = DatabaseConnection(db_config=redshift, database='redshift')
df = db.read("select * from table")
db.write("drop table tmp1 if exists")
```
### DingTalk Robot
Send message to DingTalk Robot. See [official document](https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq) for detail.
Set the following variables for default configurations
```shell
DINGTALK_URL=https://oapi.dingtalk.com/robot/send?access_token=
DINGTALK_KW=keyword
```
```python
from mcclib.dingtalk_robot import dtrobot
dtr = dtrobot.DingTalkRobot()
# or
dtr = dtrobot.DingTalkRobot(url=, keyword=)
dtr.send_text('Msg sent to DingTalk')
```
### AWS
1. s3client
```python
from mcclib.s3 import s3client, utils
client = s3client.get_client()
client.upload(bucket='test_bucket',
key='test_folder/test_file',
to_upload='local_file.txt')
client.download(bucket='test_bucket',
key='test_folder/test_file',
save_as='local_saved.txt')
client.delete(bucket='test_bucket',
key='test_folder/test_file')
client.list_s3_objects(bucket='test_bucket',
prefix='test_folder/test_file')
# copy s3 file to redshift
utils.s3_to_redshift(
ignore_header=1,
sep=',',
table='etl_test.s3_to_redshift',
bucket='bucket',
db_config=db_config,
key='test/test.txt',
region='cn-northwest-1',
aws_access_key_id='abc123',
aws_secret_access_key='abc123',
)
```
### Utility
1. config_parser
```python
from mcclib.utils import config_parser
url = 'T24_SERVICE_URL'
port = 'T24_UT_PORT'
configs = config_parser.get_env_vars([url, port])
```
### Email
```python
## read email
from mcclib.email import read_email
email_config = {
'host': 'imap.mail.com',
'port': 993,
'username': 'youremail@mail.com',
'password': 'yourpassword'
}
eid = read_email.list_email_id(
email_config=email_config,
tag='Unseen'
)
mail = read_email.fetch_mail(
email_config=email_config,
mail_id='508'
)
mail.set_seen(
email_config=email_config,
mail_id='508'
)
## Email object
mail = read_email.fetch_email_object(mconfig=email_config, mid='508')
# set flag
mail.set_unseen()
# save attachment
att_fp = mail.save_attachment(dir='./', name='测试.txt', rename='test.txt')[0]
## Send email (# SSL connection only)
from mcclib.email import send_email
stmp_config = {
'host': '123.com.cn',
'port': 465,
'username': '123@123.com',
'password': '123'
}
email_content = {
'from': 'zhangxian@microcredchina.com',
'to': ['zhangxian@microcredchina.com', 'joker0414zx@163.com'],
'cc': None,
'subject': '测试发送邮件',
'text-content': '这是测试邮件',
'attachment': ['test.txt', 'test_att.xlx']
}
send_email.send_email(email_content=email_content, stmp_config=stmp_config)
```
### Autobuild
Automatically build docker image and push to ecr repo.
```bash
autobuild -f -r
```
Requirements: `Dockerfile` and `autobuild.ini` must be included in the repository to build
- `Dockerfile`
```docker
# version: 1.0.0
# Do your stuff
FROM ...
COPY ...
```
- `autobuild.ini`
```ini
[autobuild]
ecr_repo =
```
###
### Test
```bash
# build image
docker build -t mcclib-test -f Dockerfile-test
# run test
docker run --rm --network='host' --env test_name='t24_workday' --env test_args='{"url": "http://127.0.0.1", "port": "8011"}' mcclib-test
```