bagbag


Namebagbag JSON
Version 0.66.19 PyPI version JSON
download
home_pagehttps://github.com/darren2046/bagbag
SummaryAn all in one python library
upload_time2024-04-11 02:16:18
maintainerNone
docs_urlNone
authorDarren
requires_python>=3.9
licenseMIT
keywords base library
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # bagbag

An all in one python library

# Install

```bash
pip3 install bagbag --upgrade
```

# Docker

```bash
docker run --rm --name bagbag -v /path/to/file/run.py:/app/run.py darren2046/bagbag:latest
docker run --rm --name bagbag -v /path/to/file/run.py:/app/run.py darren2046/bagbag-gui:latest # xvfb running so can use gui application such as chromedriver with selenium
docker run --rm --name bagbag -v /path/to/file/run.py:/app/run.py darren2046/bagbag-gui-debug:latest # HTTP Server serving vnc desktop runing on port 80
```

# Library

* Crypto

  * AES(key:str, mode:str="cfb")
    * Encrypt(raw:str) -> str
    * Decrypt(enc:str) -> str
* File(path:str)

  * Write(data:str)
  * Append(data:str)
* Lg 日志模块

  * Lg.SetLevel(level:日志级别:str)
  * Lg.SetFile(path:日志路径:str, size:文件大小,MB:int, during:日志保留时间,天:int, color:是否带ANSI颜色:bool=True, json:是否格式化为json:bool=False)
  * Lg.Debug(message:str)
  * Lg.Trace(message:str)
  * Lg.Info(message:str)
  * Lg.Warn(message:str)
  * Lg.Error(message:str)
* String(string:str) 一些字符串处理函数

  * HasChinese() -> bool 是否包含中文
  * Language() -> str 语言
  * Repr() -> str
  * SimplifiedChineseToTraditional() -> str
  * TraditionalChineseToSimplified() -> str
  * Ommit(length:int) -> str
  * Filter(chars:str="1234567890qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM") -> str
  * Len() -> int
  * IsIPAddress() -> bool
* Time 时间

  * Strftime(timestamp:float|int, format:str="%Y-%m-%d %H:%M:%S") -> str
  * Strptime(timestring:str, format:str=None) -> int
* Base64

  * Encode(s:str|bytes) -> str
  * Decode(s:str) -> str|bytes
* Json

  * Dumps(obj, indent=4, ensure_ascii=False) -> str
  * Loads(s:str) -> list | dict
  * ExtraValueByKey(obj:list|dict, key:str) -> list
* Hash

  * Md5sum(string:str) -> str
  * Md5sumFile(fpath:str, block_size=2**20) -> str
  * Sha256sum(data:str|bytes) -> str
  * Sha256sumFile(fpath:str, block_size=2**20) -> str
* Os

  * Exit(num:int=0)
  * Mkdir(path:str)
  * Getenv(varname:str, defaultValue:str=None) -> str | None
  * ListDir(path:str) -> list[str]
  * Unlink(path:str)
  * Move(src:str, dst:str, force:bool=True)
  * Copy(src:str, dst:str, force:bool=True)
  * Path
    * Basedir(path:str) -> str
    * Join(*path) -> str
    * Exists(path:str) -> bool
    * Uniquify(path:str) -> str
    * IsDir(path:str) -> bool
    * Basename(path:str) -> str
* Http

  * Head(url:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)
  * Get(url:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None,  TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)
  * PostRaw(url:str, Data:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)
  * PostJson(url:str, Json:dict,Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)
  * PostForm(url:str, Data:dict, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)
  * Delete(url:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)
  * PutForm(url:str, Data:dict,Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)
  * PutRaw(url:str, Data:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False, Debug:bool=False)
  * PutJson(url:str, Json:dict, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)
* Socket

  * TCP
    * Listen(host:str, port:int, waitQueue:int=5)
      * Accept() -> Chan[StreamConnection]
      * AcceptOne() -> StreamConnection
    * Connect(host:str, port:int) -> StreamConnection
      * PeerAddress() -> TCPPeerAddress
      * Send(data:str)
      * SendBytes(data:bytes)
      * Recv(length:int) -> str
      * RecvBytes(length:int) -> bytes
      * Close()
* Random

  * Int(min:int, max:int) -> int
  * Choice(obj:list|str) -> Any
  * String(length:int, charset:str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") -> str
  * Shuffle(li:list) -> list
* Funcs

  * Markdown2Html(text:str) -> str
  * Wget(url:str, dest:str=None, override=True)
  * IP2Int(ip:str) -> int
  * Int2IP(intip:int) -> str
  * ResizeImage(src:str, dst:str, width:int, quality:int=95)
  * UUID() -> str
  * CutSentence(sentence:str, filter:bool=True) -> list[str]
* Tools 一些工具

  * Cache

    * LRU(size:int) -> dict
    * FIFO(size:int) -> dict
    * LFU(size:int) -> dict
    * MRU(size:int) -> dict
    * RR(size:int) -> dict
    * TTL(size:int) -> dict
  * OCR(server:str)

    * Recognition(fpath:str, lang:str="ch") -> ocrResult
      * SaveImage(fpath:str)
  * WebCrawler()

    * Run(self, url:str) -> typing.Iterable[WebCrawlerResult]
  * JavaScript

    * Eval(code:str)
  * BlockChain

    * Tron
      * TronClient(fullNodeServer:str)
        * Block(blockNumber:int) -> tronBlock
          * Transcations() -> list[tronTranscation]
      * TronContract(address:str)
        * Info()
        * Address()
      * TronAsset(name:str)
        * Info()
        * Name()
    * Binance
      * OfficalAccountVertify
        * Twitter(account:str, waiteOnRateLimit:bool=True) -> bool
      * GetPrice(pair:str|list=None) -> CoinsPairPrice | list[CoinsPairPrice]
  * Twitter

    * Essential(bearerToken:str)
      * Search(keyword:str, sinceID:int=None, tweetPerRequest:int=10) -> typing.Iterable[twitterTweet]
      * Timeline(screename:str, sinceID:int=None, tweetPerRequest:int=10) -> typing.Iterable[twitterTweet]
    * Elevated(consumer_key:str, consumer_secret:str)
      * Search(keyword:str, days:int=7) -> typing.Iterable[twitterTweet]
      * Timeline(screename:str) -> typing.Iterable[twitterTweet]
      * Followers(screename:str) -> typing.Iterable[twitterUser]
  * Nslookup(server:list[str]=["8.8.8.8", "1.1.1.1", "8.8.4.4"], tcp:bool=False)

    * A(domain:str) -> list[str]
    * AAAA(domain:str) -> list[str]
  * MatrixBot(apiserver:str, password:str="")

    * SetRoom(room:str) -> MatrixBot
    * Send(message:str)
    * SendImage(path:str)
    * GetMessage(num:int=10) -> list[MatrixBotMessage]
      * Reply(message:str)
      * ReplyImage(path:str)
  * RSS

    * Opml(opmlurl:str) -> list[RSSFeed]
    * Feed(feedurl:str) -> list[RSSPage]
  * Queue(server:str, name:str, length:int=0, timeout:int=300)

    * QueueConfirm(name:str, length:int=0, timeout:int=300) -> queueQueueConfirm
      * Put(item:typing.Any, force:bool=False)
      * Get(self) -> typing.Tuple[str, typing.Any]
      * Done(tid:str)
      * Size(self) -> int
  * Kafka(topic:str, servers:str|list)

    * Producer(value_serializer=lambda m: json.dumps(m).encode()) -> KafkaProducer
      * Send(data:dict)
    * Consumer(group_id:str=None, auto_offset_reset:str='earliest') -> KafkaConsumer
      * Get() -> dict
  * Github(token:str, ratelimit:str="30/m")

    * Search(pattern:str) -> GithubSearchResults
      * Get() -> GithubSearchResult | None
  * SSH(host:str, port:int=None, user:str=None, password:str=None, pkey:str=None)

    * GetOutput(command:str) -> str
    * Close()
    * Upload(localpath:str, remotepath:str=None)
    * Download(remotepath:str, localpath:str=None)
    * FileInfo(filepath:str)
    * ListDir(dirpath:str=".") -> dict
  * Translater

    * Baidu(appid:str, secretkey:str)
      * SetLang(To:str="zh", From:str="auto") -> Baidu
      * Translate(text:str) -> dict
    * Google(httpProxy:str=None)
      * SetLang(To:str="zh-CN", From:str="auto") -> Google
      * Translate(text:str, format:str="html") -> str
  * XPath(html:str)

    * Find(xpath:str) -> XPath | None
    * Attribute(name:str) -> str | None
    * Text() -> str
    * Html() -> str
  * WaitGroup()

    * Add()
    * Done()
    * Wait()
  * Crontab()

    * Every(interval: int = 1) -> Crontab
    * Second() -> Crontab
    * Minute() -> Crontab
    * Hour() -> Crontab
    * Day() -> Crontab
    * Week() -> Crontab
    * At(time: str) -> Crontab
    * Do(job_func, *args, **kwargs)
    * Monday()
    * Tuesday()
    * Wednesday()
    * Thursday()
    * Friday()
    * Saturday()
    * Sunday()
  * Elasticsearch(url:str)

    * Delete(IndexName:str)
    * Collection(IndexName:str)
      * Index(id:int, data:dict, refresh:bool=False, Timeout:int=15)
      * Refresh(Timeout:int=15)
      * Delete(id:int)
      * Search(key:str, value:str, page:int=1, pagesize:int=50, OrderByKey:str=None, OrderByOrder:str="ase", Highlight:str=None, mustIncludeAllWords:bool=True)
  * CSV

    * Reader(fpath:str)
      * Read() -> dict
      * Close()
    * Writer(fpath:str, mode:str="w")
      * SetHeaders(*headers)
      * Write(row:dict[str])
      * Close()
      * Flush()
  * Xlsx

    * Reader(fpath:str)
      * Read() -> dict
      * Close()
    * Writer(fpath:str, mode:str="w")
      * SetHeaders(*headers)
      * Write(row:dict[str])
      * Close()
      * Flush()
  * WebServer(name:str=None) # 例子见源码文件Web.py的后半部分

    * Run(host:str, port:int, block:bool=True) # 监听HTTP服务
    * Route: (path:str, methods:list=["GET", "HEAD", "OPTIONS"]) # 例子见Web.py文件, 是一个装饰器
    * Request()
      * Method() -> str # 请求的HTTP方法
      * Json() -> dict | list # 格式化请求的post内容为json
      * Data() -> str # post的http的body
      * Form()
        * Get(name:str, default:str="") -> str | None # 获取表单的数据
      * Args()
        * Get(name:str, default:str="") -> str | None # 获取URL的参数
  * Chan() 内存队列, 跟go的chan一样
  * RateLimit(rate:str, sleep:bool=True) rate可以是 次数/时间区间, 时间可以是s, m, h, d, 即秒,分,时,天. 例如一分钟限制五次: 5/m. 在低速率的时候能限制准确, 例如低于1秒10次. 高速率例如每秒50次以上, 实际速率会降低, 速率越高降低越多.

    * Take() sleep=True的时候会添加一个sleep, 可以把请求平均在时间段内. 在低速率的时候能限制准确. 高速率例如每秒50次以上, 实际速率会降低, 速率越高降低越多. sleep=False的时候没有sleep, 会全在一开始扔出去, 然后block住, 等下一个周期, 在需要速率很高的时候可以这样, 例如发包的时候, 一秒限制2000个包这样.
  * URL(url:str)

    * Parse() -> URLParseResult
    * Encode() -> str
    * Decode() -> str
  * Prometheus

    * MetricServer(listen:str="0.0.0.0", port:int=9105)
    * PushGateway(address:str, job:str, pushinterval:int=15, instance:str=None)
      * NewCounter(name:str, help:str) -> prometheusCounter
        * Add(num:int|float=1)
      * NewCounterWithLabel(name:str, labels:list[str], help:str) -> prometheusCounterVec
        * Add(labels:dict|list, num:int|float=1)
      * NewGauge(name:str, help:str) -> prometheusGauge
        * Set(num:int|float)
      * NewGaugeWithLabel(name:str, labels:list[str], help:str) -> prometheusGaugeVec
        * Set(labels:dict|list, num:int|float=1)
  * Selenium

    * Firefox(seleniumServer:str=None, PACFileURL:str=None, sessionID:str=None)
    * Chrome(seleniumServer:str=None, httpProxy:str=None, sessionID=None)
      * Except(*xpath:str, timeout:int=30) -> int | None
      * ResizeWindow(width:int, height:int)
      * ScrollRight(pixel:int)
      * ScrollLeft(pixel:int)
      * ScrollUp(pixel:int)
      * ScrollDown(pixel:int)
      * Url() -> str
      * Cookie() -> list[dict]
      * SetCookie(cookie_dict:dict)
      * Refresh()
      * GetSession() -> str
      * Get(url:str)
      * PageSource() -> str
      * Title() -> str
      * Close()
      * SwitchTabByID(number:int)
      * SwitchTabByIdent(ident:str)
      * Tabs() -> list[str]
      * NewTab() -> str
      * Find(xpath:str, timeout:int=60, scrollIntoElement:bool=True) -> SeleniumElement
        * Clear() -> SeleniumElement
        * Click() -> SeleniumElement
        * Text() -> str
        * Attribute(name:str) -> str
        * Input(string:str) -> SeleniumElement
        * Submit() -> SeleniumElement
        * PressEnter() -> SeleniumElement
        * ScrollIntoElement() -> SeleniumElement
  * Telegram(appid:str, apphash:str, sessionString:str=None)

    * SessionString() -> str
    * ResolvePeerByUsername(username:str) -> TelegramPeer | None
    * PeerByIDAndHash(ID:int, Hash:int, Type:str="channel") -> TelegramPeer | None
      * Resolve() # 如果手动根据ID初始化一个TelegramPeer实例, 调用这个函数可以补全这个ID对应的Peer的信息
      * SendMessage(message:str)
      * Messages(limit:int=100, offset:int=0) -> list[TelegramMessage]
      * Message(id:str) -> TelegramMessage
        * Refresh() -> TelegramMessage # 有时候同一个id, 被编辑了, 刷新一下返回最新的消息
        * ClickButton(buttonText:str) -> bool
        * Delete()
  * TelegramBotOfficial(token:str)

    * GetMe() -> telebot.types.User
    * SetChatID(chatid:int) -> TelegramBot
    * SetTags(*tags:str) -> TelegramBot
    * SendFile(path:str)
    * SendImage(path:str)
    * SendVideo(path:str)
    * SendAudio(path:str)
    * SendLocation(latitude:float, longitude:float)
    * SendMsg(msg:str, *tags:str)
  * ProgressBar(iterable_obj, total=None, title=None, leave=False)
  * Redis(host: str, port: int = 6379, database: int = 0, password: str = "")

    * Set(key:str, value:str, ttl:int=None) -> (bool | None)
    * Get(key:str) -> (str | None)
    * Del(key:str) -> int
    * Lock(key:str) -> RedisLock
      * Acquire()
      * Release()
    * Queue(key:str) -> RedisQueue
      * Size() -> int
      * Put(item:str)
      * Get(block=True, timeout=None) -> str
  * MySQL(host: str, port: int, user: str, password: str, database: str, prefix:str = "") # 跟5.7兼容. 因为orator跟5.7兼容, 跟8.0会有小问题, 作者很久不更新, 有空换掉这个orm. **注意, Python的MySQL操作不支持多线程, 需要每个线程连接一次MySQL, 不过这个是自动的, 在Get, Update等操作的时候如果链接异常就重连**
  * SQLite(path: str, prefix:str = "") **由于SQLite每次只能一个线程进行操作, 所以这里默认会有一个锁, 线程安全**

    * Queue(tbname:str, size:int=None) -> NamedQueue
      * Size() -> int
      * Get(wait=True) -> Any
      * Put(string:Any)
    * QueueConfirm(tbname:str, size:int=None, timeout:int=900) -> NamedConfirmQueue
      * Size() -> int
      * SizeStarted() -> int
      * SizeTotal() -> int
      * Get(wait=True) -> typing.Tuple[int, typing.Any]
      * Put(item:typing.Any)
      * Done(id:int)
    * Execute(sql: str) -> (bool | int | list)
    * Tables() -> list
    * Table(tbname: str) -> MySQLSQLiteTable
      * AddColumn(colname: str, coltype: str, default=None, nullable:bool = True) -> MySQLSQLiteTable
      * AddIndex(*cols: str) -> MySQLSQLiteTable
      * Fields(*cols: str) -> MySQLSQLiteTable
      * Where(key:str, opera:str, value:str) -> MySQLSQLiteTable
      * WhereIn(key:str, value: list) -> MySQLSQLiteTable
      * WhereNotIn(key:str, value: list) -> MySQLSQLiteTable
      * WhereNull(key:str) -> MySQLSQLiteTable
      * WhereNotNull(key:str) -> MySQLSQLiteTable
      * WhereBetween(key:str, start:int|float|str, end:int|float|str) -> MySQLSQLiteTable
      * WhereNotBetween(key:str, start:int|float|str, end:int|float|str) -> MySQLSQLiteTable
      * OrWhere(key:str, opera:str, value:str) -> MySQLSQLiteTable
      * OrWhereIn(key:str, value: list) -> MySQLSQLiteTable
      * OrderBy(*key:str) -> MySQLSQLiteTable
      * Limit(num:int) -> MySQLSQLiteTable
      * Paginate(size:int, page:int) -> MySQLSQLiteTable
      * Data(value:map) -> MySQLSQLiteTable
      * Offset(num:int) -> MySQLSQLiteTable
      * Insert()
      * Update()
      * Delete()
      * InsertGetID() -> int
      * Exists() -> bool
      * Count() -> int
      * Find(id:int) -> map
      * First() -> map
      * Get() -> list
      * Columns() -> list[map]
    * KeyValue(tbname:str)
      * Get(key:str) -> Any
      * Set(key:str, value:Any)
      * Del(key:str)
      * Keys() -> list[str]

其它的

* Thread(func, *args:Any, daemon:bool=True) -> threading.Thread # 启动线程, daemon=True
* Process(func, *args:Any, daemon:bool=True) -> multiprocessing.Process # 启动进程, daemon=True


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/darren2046/bagbag",
    "name": "bagbag",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "base, library",
    "author": "Darren",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/2f/5b/9e9a2bb0160832088cab1ee06ee6bf2e6a9c4f91177f14e3945469b0d228/bagbag-0.66.19.tar.gz",
    "platform": null,
    "description": "# bagbag\n\nAn all in one python library\n\n# Install\n\n```bash\npip3 install bagbag --upgrade\n```\n\n# Docker\n\n```bash\ndocker run --rm --name bagbag -v /path/to/file/run.py:/app/run.py darren2046/bagbag:latest\ndocker run --rm --name bagbag -v /path/to/file/run.py:/app/run.py darren2046/bagbag-gui:latest # xvfb running so can use gui application such as chromedriver with selenium\ndocker run --rm --name bagbag -v /path/to/file/run.py:/app/run.py darren2046/bagbag-gui-debug:latest # HTTP Server serving vnc desktop runing on port 80\n```\n\n# Library\n\n* Crypto\n\n  * AES(key:str, mode:str=\"cfb\")\n    * Encrypt(raw:str) -> str\n    * Decrypt(enc:str) -> str\n* File(path:str)\n\n  * Write(data:str)\n  * Append(data:str)\n* Lg \u65e5\u5fd7\u6a21\u5757\n\n  * Lg.SetLevel(level:\u65e5\u5fd7\u7ea7\u522b:str)\n  * Lg.SetFile(path:\u65e5\u5fd7\u8def\u5f84:str, size:\u6587\u4ef6\u5927\u5c0f\uff0cMB:int, during:\u65e5\u5fd7\u4fdd\u7559\u65f6\u95f4\uff0c\u5929:int, color:\u662f\u5426\u5e26ANSI\u989c\u8272:bool=True, json:\u662f\u5426\u683c\u5f0f\u5316\u4e3ajson:bool=False)\n  * Lg.Debug(message:str)\n  * Lg.Trace(message:str)\n  * Lg.Info(message:str)\n  * Lg.Warn(message:str)\n  * Lg.Error(message:str)\n* String(string:str) \u4e00\u4e9b\u5b57\u7b26\u4e32\u5904\u7406\u51fd\u6570\n\n  * HasChinese() -> bool \u662f\u5426\u5305\u542b\u4e2d\u6587\n  * Language() -> str \u8bed\u8a00\n  * Repr() -> str\n  * SimplifiedChineseToTraditional() -> str\n  * TraditionalChineseToSimplified() -> str\n  * Ommit(length:int) -> str\n  * Filter(chars:str=\"1234567890qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM\") -> str\n  * Len() -> int\n  * IsIPAddress() -> bool\n* Time \u65f6\u95f4\n\n  * Strftime(timestamp:float|int, format:str=\"%Y-%m-%d %H:%M:%S\") -> str\n  * Strptime(timestring:str, format:str=None) -> int\n* Base64\n\n  * Encode(s:str|bytes) -> str\n  * Decode(s:str) -> str|bytes\n* Json\n\n  * Dumps(obj, indent=4, ensure_ascii=False) -> str\n  * Loads(s:str) -> list | dict\n  * ExtraValueByKey(obj:list|dict, key:str) -> list\n* Hash\n\n  * Md5sum(string:str) -> str\n  * Md5sumFile(fpath:str, block_size=2**20) -> str\n  * Sha256sum(data:str|bytes) -> str\n  * Sha256sumFile(fpath:str, block_size=2**20) -> str\n* Os\n\n  * Exit(num:int=0)\n  * Mkdir(path:str)\n  * Getenv(varname:str, defaultValue:str=None) -> str | None\n  * ListDir(path:str) -> list[str]\n  * Unlink(path:str)\n  * Move(src:str, dst:str, force:bool=True)\n  * Copy(src:str, dst:str, force:bool=True)\n  * Path\n    * Basedir(path:str) -> str\n    * Join(*path) -> str\n    * Exists(path:str) -> bool\n    * Uniquify(path:str) -> str\n    * IsDir(path:str) -> bool\n    * Basename(path:str) -> str\n* Http\n\n  * Head(url:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)\n  * Get(url:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None,  TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)\n  * PostRaw(url:str, Data:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)\n  * PostJson(url:str, Json:dict,Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)\n  * PostForm(url:str, Data:dict, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)\n  * Delete(url:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)\n  * PutForm(url:str, Data:dict,Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)\n  * PutRaw(url:str, Data:str, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False, Debug:bool=False)\n  * PutJson(url:str, Json:dict, Timeout:str=None, ReadBodySize:int=None, FollowRedirect:bool=True, HttpProxy:str=None, TimeoutRetryTimes:int=0, InsecureSkipVerify:int=False,Debug:bool=False)\n* Socket\n\n  * TCP\n    * Listen(host:str, port:int, waitQueue:int=5)\n      * Accept() -> Chan[StreamConnection]\n      * AcceptOne() -> StreamConnection\n    * Connect(host:str, port:int) -> StreamConnection\n      * PeerAddress() -> TCPPeerAddress\n      * Send(data:str)\n      * SendBytes(data:bytes)\n      * Recv(length:int) -> str\n      * RecvBytes(length:int) -> bytes\n      * Close()\n* Random\n\n  * Int(min:int, max:int) -> int\n  * Choice(obj:list|str) -> Any\n  * String(length:int, charset:str=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\") -> str\n  * Shuffle(li:list) -> list\n* Funcs\n\n  * Markdown2Html(text:str) -> str\n  * Wget(url:str, dest:str=None, override=True)\n  * IP2Int(ip:str) -> int\n  * Int2IP(intip:int) -> str\n  * ResizeImage(src:str, dst:str, width:int, quality:int=95)\n  * UUID() -> str\n  * CutSentence(sentence:str, filter:bool=True) -> list[str]\n* Tools \u4e00\u4e9b\u5de5\u5177\n\n  * Cache\n\n    * LRU(size:int) -> dict\n    * FIFO(size:int) -> dict\n    * LFU(size:int) -> dict\n    * MRU(size:int) -> dict\n    * RR(size:int) -> dict\n    * TTL(size:int) -> dict\n  * OCR(server:str)\n\n    * Recognition(fpath:str, lang:str=\"ch\") -> ocrResult\n      * SaveImage(fpath:str)\n  * WebCrawler()\n\n    * Run(self, url:str) -> typing.Iterable[WebCrawlerResult]\n  * JavaScript\n\n    * Eval(code:str)\n  * BlockChain\n\n    * Tron\n      * TronClient(fullNodeServer:str)\n        * Block(blockNumber:int) -> tronBlock\n          * Transcations() -> list[tronTranscation]\n      * TronContract(address:str)\n        * Info()\n        * Address()\n      * TronAsset(name:str)\n        * Info()\n        * Name()\n    * Binance\n      * OfficalAccountVertify\n        * Twitter(account:str, waiteOnRateLimit:bool=True) -> bool\n      * GetPrice(pair:str|list=None) -> CoinsPairPrice | list[CoinsPairPrice]\n  * Twitter\n\n    * Essential(bearerToken:str)\n      * Search(keyword:str, sinceID:int=None, tweetPerRequest:int=10) -> typing.Iterable[twitterTweet]\n      * Timeline(screename:str, sinceID:int=None, tweetPerRequest:int=10) -> typing.Iterable[twitterTweet]\n    * Elevated(consumer_key:str, consumer_secret:str)\n      * Search(keyword:str, days:int=7) -> typing.Iterable[twitterTweet]\n      * Timeline(screename:str) -> typing.Iterable[twitterTweet]\n      * Followers(screename:str) -> typing.Iterable[twitterUser]\n  * Nslookup(server:list[str]=[\"8.8.8.8\", \"1.1.1.1\", \"8.8.4.4\"], tcp:bool=False)\n\n    * A(domain:str) -> list[str]\n    * AAAA(domain:str) -> list[str]\n  * MatrixBot(apiserver:str, password:str=\"\")\n\n    * SetRoom(room:str) -> MatrixBot\n    * Send(message:str)\n    * SendImage(path:str)\n    * GetMessage(num:int=10) -> list[MatrixBotMessage]\n      * Reply(message:str)\n      * ReplyImage(path:str)\n  * RSS\n\n    * Opml(opmlurl:str) -> list[RSSFeed]\n    * Feed(feedurl:str) -> list[RSSPage]\n  * Queue(server:str, name:str, length:int=0, timeout:int=300)\n\n    * QueueConfirm(name:str, length:int=0, timeout:int=300) -> queueQueueConfirm\n      * Put(item:typing.Any, force:bool=False)\n      * Get(self) -> typing.Tuple[str, typing.Any]\n      * Done(tid:str)\n      * Size(self) -> int\n  * Kafka(topic:str, servers:str|list)\n\n    * Producer(value_serializer=lambda m: json.dumps(m).encode()) -> KafkaProducer\n      * Send(data:dict)\n    * Consumer(group_id:str=None, auto_offset_reset:str='earliest') -> KafkaConsumer\n      * Get() -> dict\n  * Github(token:str, ratelimit:str=\"30/m\")\n\n    * Search(pattern:str) -> GithubSearchResults\n      * Get() -> GithubSearchResult | None\n  * SSH(host:str, port:int=None, user:str=None, password:str=None, pkey:str=None)\n\n    * GetOutput(command:str) -> str\n    * Close()\n    * Upload(localpath:str, remotepath:str=None)\n    * Download(remotepath:str, localpath:str=None)\n    * FileInfo(filepath:str)\n    * ListDir(dirpath:str=\".\") -> dict\n  * Translater\n\n    * Baidu(appid:str, secretkey:str)\n      * SetLang(To:str=\"zh\", From:str=\"auto\") -> Baidu\n      * Translate(text:str) -> dict\n    * Google(httpProxy:str=None)\n      * SetLang(To:str=\"zh-CN\", From:str=\"auto\") -> Google\n      * Translate(text:str, format:str=\"html\") -> str\n  * XPath(html:str)\n\n    * Find(xpath:str) -> XPath | None\n    * Attribute(name:str) -> str | None\n    * Text() -> str\n    * Html() -> str\n  * WaitGroup()\n\n    * Add()\n    * Done()\n    * Wait()\n  * Crontab()\n\n    * Every(interval: int = 1) -> Crontab\n    * Second() -> Crontab\n    * Minute() -> Crontab\n    * Hour() -> Crontab\n    * Day() -> Crontab\n    * Week() -> Crontab\n    * At(time: str) -> Crontab\n    * Do(job_func, *args, **kwargs)\n    * Monday()\n    * Tuesday()\n    * Wednesday()\n    * Thursday()\n    * Friday()\n    * Saturday()\n    * Sunday()\n  * Elasticsearch(url:str)\n\n    * Delete(IndexName:str)\n    * Collection(IndexName:str)\n      * Index(id:int, data:dict, refresh:bool=False, Timeout:int=15)\n      * Refresh(Timeout:int=15)\n      * Delete(id:int)\n      * Search(key:str, value:str, page:int=1, pagesize:int=50, OrderByKey:str=None, OrderByOrder:str=\"ase\", Highlight:str=None, mustIncludeAllWords:bool=True)\n  * CSV\n\n    * Reader(fpath:str)\n      * Read() -> dict\n      * Close()\n    * Writer(fpath:str, mode:str=\"w\")\n      * SetHeaders(*headers)\n      * Write(row:dict[str])\n      * Close()\n      * Flush()\n  * Xlsx\n\n    * Reader(fpath:str)\n      * Read() -> dict\n      * Close()\n    * Writer(fpath:str, mode:str=\"w\")\n      * SetHeaders(*headers)\n      * Write(row:dict[str])\n      * Close()\n      * Flush()\n  * WebServer(name:str=None) # \u4f8b\u5b50\u89c1\u6e90\u7801\u6587\u4ef6Web.py\u7684\u540e\u534a\u90e8\u5206\n\n    * Run(host:str, port:int, block:bool=True) # \u76d1\u542cHTTP\u670d\u52a1\n    * Route: (path:str, methods:list=[\"GET\", \"HEAD\", \"OPTIONS\"]) # \u4f8b\u5b50\u89c1Web.py\u6587\u4ef6, \u662f\u4e00\u4e2a\u88c5\u9970\u5668\n    * Request()\n      * Method() -> str # \u8bf7\u6c42\u7684HTTP\u65b9\u6cd5\n      * Json() -> dict | list # \u683c\u5f0f\u5316\u8bf7\u6c42\u7684post\u5185\u5bb9\u4e3ajson\n      * Data() -> str # post\u7684http\u7684body\n      * Form()\n        * Get(name:str, default:str=\"\") -> str | None # \u83b7\u53d6\u8868\u5355\u7684\u6570\u636e\n      * Args()\n        * Get(name:str, default:str=\"\") -> str | None # \u83b7\u53d6URL\u7684\u53c2\u6570\n  * Chan() \u5185\u5b58\u961f\u5217, \u8ddfgo\u7684chan\u4e00\u6837\n  * RateLimit(rate:str, sleep:bool=True) rate\u53ef\u4ee5\u662f \u6b21\u6570/\u65f6\u95f4\u533a\u95f4, \u65f6\u95f4\u53ef\u4ee5\u662fs, m, h, d, \u5373\u79d2,\u5206,\u65f6,\u5929. \u4f8b\u5982\u4e00\u5206\u949f\u9650\u5236\u4e94\u6b21: 5/m. \u5728\u4f4e\u901f\u7387\u7684\u65f6\u5019\u80fd\u9650\u5236\u51c6\u786e, \u4f8b\u5982\u4f4e\u4e8e1\u79d210\u6b21. \u9ad8\u901f\u7387\u4f8b\u5982\u6bcf\u79d250\u6b21\u4ee5\u4e0a, \u5b9e\u9645\u901f\u7387\u4f1a\u964d\u4f4e, \u901f\u7387\u8d8a\u9ad8\u964d\u4f4e\u8d8a\u591a.\n\n    * Take() sleep=True\u7684\u65f6\u5019\u4f1a\u6dfb\u52a0\u4e00\u4e2asleep, \u53ef\u4ee5\u628a\u8bf7\u6c42\u5e73\u5747\u5728\u65f6\u95f4\u6bb5\u5185. \u5728\u4f4e\u901f\u7387\u7684\u65f6\u5019\u80fd\u9650\u5236\u51c6\u786e. \u9ad8\u901f\u7387\u4f8b\u5982\u6bcf\u79d250\u6b21\u4ee5\u4e0a, \u5b9e\u9645\u901f\u7387\u4f1a\u964d\u4f4e, \u901f\u7387\u8d8a\u9ad8\u964d\u4f4e\u8d8a\u591a. sleep=False\u7684\u65f6\u5019\u6ca1\u6709sleep, \u4f1a\u5168\u5728\u4e00\u5f00\u59cb\u6254\u51fa\u53bb, \u7136\u540eblock\u4f4f, \u7b49\u4e0b\u4e00\u4e2a\u5468\u671f, \u5728\u9700\u8981\u901f\u7387\u5f88\u9ad8\u7684\u65f6\u5019\u53ef\u4ee5\u8fd9\u6837, \u4f8b\u5982\u53d1\u5305\u7684\u65f6\u5019, \u4e00\u79d2\u9650\u52362000\u4e2a\u5305\u8fd9\u6837.\n  * URL(url:str)\n\n    * Parse() -> URLParseResult\n    * Encode() -> str\n    * Decode() -> str\n  * Prometheus\n\n    * MetricServer(listen:str=\"0.0.0.0\", port:int=9105)\n    * PushGateway(address:str, job:str, pushinterval:int=15, instance:str=None)\n      * NewCounter(name:str, help:str) -> prometheusCounter\n        * Add(num:int|float=1)\n      * NewCounterWithLabel(name:str, labels:list[str], help:str) -> prometheusCounterVec\n        * Add(labels:dict|list, num:int|float=1)\n      * NewGauge(name:str, help:str) -> prometheusGauge\n        * Set(num:int|float)\n      * NewGaugeWithLabel(name:str, labels:list[str], help:str) -> prometheusGaugeVec\n        * Set(labels:dict|list, num:int|float=1)\n  * Selenium\n\n    * Firefox(seleniumServer:str=None, PACFileURL:str=None, sessionID:str=None)\n    * Chrome(seleniumServer:str=None, httpProxy:str=None, sessionID=None)\n      * Except(*xpath:str, timeout:int=30) -> int | None\n      * ResizeWindow(width:int, height:int)\n      * ScrollRight(pixel:int)\n      * ScrollLeft(pixel:int)\n      * ScrollUp(pixel:int)\n      * ScrollDown(pixel:int)\n      * Url() -> str\n      * Cookie() -> list[dict]\n      * SetCookie(cookie_dict:dict)\n      * Refresh()\n      * GetSession() -> str\n      * Get(url:str)\n      * PageSource() -> str\n      * Title() -> str\n      * Close()\n      * SwitchTabByID(number:int)\n      * SwitchTabByIdent(ident:str)\n      * Tabs() -> list[str]\n      * NewTab() -> str\n      * Find(xpath:str, timeout:int=60, scrollIntoElement:bool=True) -> SeleniumElement\n        * Clear() -> SeleniumElement\n        * Click() -> SeleniumElement\n        * Text() -> str\n        * Attribute(name:str) -> str\n        * Input(string:str) -> SeleniumElement\n        * Submit() -> SeleniumElement\n        * PressEnter() -> SeleniumElement\n        * ScrollIntoElement() -> SeleniumElement\n  * Telegram(appid:str, apphash:str, sessionString:str=None)\n\n    * SessionString() -> str\n    * ResolvePeerByUsername(username:str) -> TelegramPeer | None\n    * PeerByIDAndHash(ID:int, Hash:int, Type:str=\"channel\") -> TelegramPeer | None\n      * Resolve() # \u5982\u679c\u624b\u52a8\u6839\u636eID\u521d\u59cb\u5316\u4e00\u4e2aTelegramPeer\u5b9e\u4f8b, \u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\u53ef\u4ee5\u8865\u5168\u8fd9\u4e2aID\u5bf9\u5e94\u7684Peer\u7684\u4fe1\u606f\n      * SendMessage(message:str)\n      * Messages(limit:int=100, offset:int=0) -> list[TelegramMessage]\n      * Message(id:str) -> TelegramMessage\n        * Refresh() -> TelegramMessage # \u6709\u65f6\u5019\u540c\u4e00\u4e2aid, \u88ab\u7f16\u8f91\u4e86, \u5237\u65b0\u4e00\u4e0b\u8fd4\u56de\u6700\u65b0\u7684\u6d88\u606f\n        * ClickButton(buttonText:str) -> bool\n        * Delete()\n  * TelegramBotOfficial(token:str)\n\n    * GetMe() -> telebot.types.User\n    * SetChatID(chatid:int) -> TelegramBot\n    * SetTags(*tags:str) -> TelegramBot\n    * SendFile(path:str)\n    * SendImage(path:str)\n    * SendVideo(path:str)\n    * SendAudio(path:str)\n    * SendLocation(latitude:float, longitude:float)\n    * SendMsg(msg:str, *tags:str)\n  * ProgressBar(iterable_obj, total=None, title=None, leave=False)\n  * Redis(host: str, port: int = 6379, database: int = 0, password: str = \"\")\n\n    * Set(key:str, value:str, ttl:int=None) -> (bool | None)\n    * Get(key:str) -> (str | None)\n    * Del(key:str) -> int\n    * Lock(key:str) -> RedisLock\n      * Acquire()\n      * Release()\n    * Queue(key:str) -> RedisQueue\n      * Size() -> int\n      * Put(item:str)\n      * Get(block=True, timeout=None) -> str\n  * MySQL(host: str, port: int, user: str, password: str, database: str, prefix:str = \"\") # \u8ddf5.7\u517c\u5bb9. \u56e0\u4e3aorator\u8ddf5.7\u517c\u5bb9, \u8ddf8.0\u4f1a\u6709\u5c0f\u95ee\u9898, \u4f5c\u8005\u5f88\u4e45\u4e0d\u66f4\u65b0, \u6709\u7a7a\u6362\u6389\u8fd9\u4e2aorm. **\u6ce8\u610f, Python\u7684MySQL\u64cd\u4f5c\u4e0d\u652f\u6301\u591a\u7ebf\u7a0b, \u9700\u8981\u6bcf\u4e2a\u7ebf\u7a0b\u8fde\u63a5\u4e00\u6b21MySQL, \u4e0d\u8fc7\u8fd9\u4e2a\u662f\u81ea\u52a8\u7684, \u5728Get, Update\u7b49\u64cd\u4f5c\u7684\u65f6\u5019\u5982\u679c\u94fe\u63a5\u5f02\u5e38\u5c31\u91cd\u8fde**\n  * SQLite(path: str, prefix:str = \"\") **\u7531\u4e8eSQLite\u6bcf\u6b21\u53ea\u80fd\u4e00\u4e2a\u7ebf\u7a0b\u8fdb\u884c\u64cd\u4f5c, \u6240\u4ee5\u8fd9\u91cc\u9ed8\u8ba4\u4f1a\u6709\u4e00\u4e2a\u9501, \u7ebf\u7a0b\u5b89\u5168**\n\n    * Queue(tbname:str, size:int=None) -> NamedQueue\n      * Size() -> int\n      * Get(wait=True) -> Any\n      * Put(string:Any)\n    * QueueConfirm(tbname:str, size:int=None, timeout:int=900) -> NamedConfirmQueue\n      * Size() -> int\n      * SizeStarted() -> int\n      * SizeTotal() -> int\n      * Get(wait=True) -> typing.Tuple[int, typing.Any]\n      * Put(item:typing.Any)\n      * Done(id:int)\n    * Execute(sql: str) -> (bool | int | list)\n    * Tables() -> list\n    * Table(tbname: str) -> MySQLSQLiteTable\n      * AddColumn(colname: str, coltype: str, default=None, nullable:bool = True) -> MySQLSQLiteTable\n      * AddIndex(*cols: str) -> MySQLSQLiteTable\n      * Fields(*cols: str) -> MySQLSQLiteTable\n      * Where(key:str, opera:str, value:str) -> MySQLSQLiteTable\n      * WhereIn(key:str, value: list) -> MySQLSQLiteTable\n      * WhereNotIn(key:str, value: list) -> MySQLSQLiteTable\n      * WhereNull(key:str) -> MySQLSQLiteTable\n      * WhereNotNull(key:str) -> MySQLSQLiteTable\n      * WhereBetween(key:str, start:int|float|str, end:int|float|str) -> MySQLSQLiteTable\n      * WhereNotBetween(key:str, start:int|float|str, end:int|float|str) -> MySQLSQLiteTable\n      * OrWhere(key:str, opera:str, value:str) -> MySQLSQLiteTable\n      * OrWhereIn(key:str, value: list) -> MySQLSQLiteTable\n      * OrderBy(*key:str) -> MySQLSQLiteTable\n      * Limit(num:int) -> MySQLSQLiteTable\n      * Paginate(size:int, page:int) -> MySQLSQLiteTable\n      * Data(value:map) -> MySQLSQLiteTable\n      * Offset(num:int) -> MySQLSQLiteTable\n      * Insert()\n      * Update()\n      * Delete()\n      * InsertGetID() -> int\n      * Exists() -> bool\n      * Count() -> int\n      * Find(id:int) -> map\n      * First() -> map\n      * Get() -> list\n      * Columns() -> list[map]\n    * KeyValue(tbname:str)\n      * Get(key:str) -> Any\n      * Set(key:str, value:Any)\n      * Del(key:str)\n      * Keys() -> list[str]\n\n\u5176\u5b83\u7684\n\n* Thread(func, *args:Any, daemon:bool=True) -> threading.Thread # \u542f\u52a8\u7ebf\u7a0b, daemon=True\n* Process(func, *args:Any, daemon:bool=True) -> multiprocessing.Process # \u542f\u52a8\u8fdb\u7a0b, daemon=True\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "An all in one python library",
    "version": "0.66.19",
    "project_urls": {
        "Homepage": "https://github.com/darren2046/bagbag",
        "Repository": "https://github.com/darren2046/bagbag"
    },
    "split_keywords": [
        "base",
        " library"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f0268da8c191c34d49edd04b70f8020736ecb4d7d03a698a69a4b18e86629eb5",
                "md5": "6bca11784acffe72e3e5e0f0e3ae5836",
                "sha256": "d0f228cbdc309b2aa4ab9c6ba59f030ec73dc3353ac2f16124d40ca3c7dd070c"
            },
            "downloads": -1,
            "filename": "bagbag-0.66.19-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6bca11784acffe72e3e5e0f0e3ae5836",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 396052,
            "upload_time": "2024-04-11T02:16:12",
            "upload_time_iso_8601": "2024-04-11T02:16:12.614060Z",
            "url": "https://files.pythonhosted.org/packages/f0/26/8da8c191c34d49edd04b70f8020736ecb4d7d03a698a69a4b18e86629eb5/bagbag-0.66.19-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2f5b9e9a2bb0160832088cab1ee06ee6bf2e6a9c4f91177f14e3945469b0d228",
                "md5": "585930fb052a1510fe6aa316d2aeca42",
                "sha256": "2d17577ebe961bf2ef0d5aca35e91f5d1b34d9e15907b839e0c45129efa1cb5a"
            },
            "downloads": -1,
            "filename": "bagbag-0.66.19.tar.gz",
            "has_sig": false,
            "md5_digest": "585930fb052a1510fe6aa316d2aeca42",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 295562,
            "upload_time": "2024-04-11T02:16:18",
            "upload_time_iso_8601": "2024-04-11T02:16:18.038540Z",
            "url": "https://files.pythonhosted.org/packages/2f/5b/9e9a2bb0160832088cab1ee06ee6bf2e6a9c4f91177f14e3945469b0d228/bagbag-0.66.19.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-11 02:16:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "darren2046",
    "github_project": "bagbag",
    "github_not_found": true,
    "lcname": "bagbag"
}
        
Elapsed time: 0.26688s