semvec/pypi-packages huggingface dataset:
PyAutoMaker 0.3.0
자동화를 위한 패키지
Requires Python: >=3.7

# PyAutoMaker
----  
자동화를 위한 파이썬 패키지  
개발중인 버전이며 내보낸 API는 언제든지 변경될 수 있습니다  



# 설치방법
----  

[PyPI package](https://pypi.python.org/pypi/PyAutoMaker/)에서 설치하는 방법

    pip install PyAutoMaker -U

또는 저장소에서 클론하는 방법

    git clone https://github.com/boa9448/PyAutoMaker
    cd PyAutoMaker
    python setup.py install


# 사용방법
----  

## 특정 이름을 가진 창의 핸들을 구하는 방법  
```
import PyAutoMaker as pam

handle_list : list[int] = pam.utils.get_window_handle("제목 없음 - Windows 메모장")
```

## 데스크탑 스크린샷을 찍는 방법  
```
import cv2

import PyAutoMaker as pam

#화면 스크린샷
img = pam.image.desktop_screenshot()
cv2.imshow("desktop_screenshot", img)
cv2.waitKey()
cv2.destroyAllWindows()
```  

## 특정 이름을 가진 창의 스크린샷을 찍는 방법  
```
import cv2

import PyAutoMaker as pam

#화면 스크린샷
img = pam.image.screenshotEx("MapleStory", rect = (0, 0, 500, 500))
cv2.imshow("screenshotEx", img)
cv2.waitKey()
cv2.destroyAllWindows()
```

## 화면에서 이미지서치를 사용하는 방법  
```
import cv2

import PyAutoMaker as pam

src = pam.image.desktop_screenshot()
temp = cv2.imread("temp.png")
result = pam.imageSearchEx(src, temp)

for left, top, right, bottom in result:
    cv2.rectangle(src, (left, top), (right, bottom), (0, 255, 0), 2)

cv2.imshow("view", src)
cv2.waitKey()
cv2.destroyAllWindows()
```

## 아두이노를 사용해서 키보드 마우스를 입력하는 방법  
```
import PyAutoMaker as pam

#펌웨어는 처음 한번만 업로드 하세요
#pam.arduino.upload()

arduino = pam.arduino.ArduinoUtil(pam.arduino.user_select_port(), 115200)

#A 입력
arduino.key_press(ord("A"))
arduino.key_release(ord("A"))

#컨트롤 키 입력
arduino.key_press(pam.input.KEY_LEFT_CTRL)
arduino.key_release(pam.input.KEY_LEFT_CTRL)

#100, 100좌표로 이동
arduino.move(100, 100, False)

#현재 좌표에서 100, 100만큼 이동
arduino.move(100, 100, True)


#마우스 좌클릭
arduino.btn_press(pam.input.BUTTON_LEFT)
arduino.btn_release(pam.input.BUTTON_LEFT)
```


## class dd를 사용해서 키보드 마우스를 입력하는 방법  
```
import PyAutoMaker as pam

dd = pam.class_dd.DDUtil()

#A 입력
dd.key_press(ord("A"))
dd.key_release(ord("A"))

#100, 100좌표로 이동
dd.move(100, 100, False)

#현재 좌표에서 100, 100만큼 이동
dd.move(100, 100, True)

#마우스 좌클릭
dd.btn_press(pam.input.BUTTON_LEFT)
dd.btn_release(pam.input.BUTTON_LEFT)
```

## 또는...  
```
import PyAutoMaker as pam

#아두이노를 사용할 때는 펌웨어를 처음 한번만 업로드 하세요
#pam.arduino.upload()

#아두이노 사용
input_ = pam.input.InputUtil(pam.input.DDUtil, tuple())

#또는 class dd사용
#input_ = pam.input.InputUtil(pam.input., (pam.arduino.user_select_port(), 115200))

#A 입력
input_.key_press(ord("A"))
input_.key_release(ord("A"))

#컨트롤 키 입력
input_.key_press(pam.input.KEY_LEFT_CTRL)
input_.key_release(pam.input.KEY_LEFT_CTRL)

#100, 100좌표로 이동
input_.move(100, 100, False)

#현재 좌표에서 100, 100만큼 이동
input_.move(100, 100, True)


#마우스 좌클릭
input_.btn_press(pam.input.BUTTON_LEFT)
input_.btn_release(pam.input.BUTTON_LEFT)
```
ibalert 0.1.6
Notification/Alert for django users
Keywords: python,websocket,channels,python-alerts,ideabreed


### Simple Notification

A basic & minimal example, of handling notification using websocket.

### Tools

- [Django 3.1](https://djangoproject.com)
- [Channels 3.0.1](https://channels.readthedocs.io/en/stable/)

### Installation

On your terminal/shell

```bash

pip3 install ibalert

sudo docker run -p 6379:6379 -d redis:5

```

### Quiz setup

---

In your project's settings.py file. Add ibalert and channels to intallled apps and configure redis.

```python
# settings.py

INSTALLED_APPS = [
  ...,
  "ibalert",
  "channels"
]

ASGI_APPLICATION = "ibalert.asgi.application"

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {"hosts": [("localhost", 6379)]},
    }
}

```

In your project's urls.py

```python
...
from django.views.generic import TemplateView

urlpatterns = [
    path("", TemplateView.as_view(template_name="home.html")),
    ...
]
```

In your templates directory add home.html file. (Just to make sure the app is working. Later you can implement it the way you want.)

```html
<html>
  <head>
    <title>IB-Alert</title>
    <link
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
      rel="stylesheet"
    />
  </head>

  <body>
    <div class="container">
      <h4 class="text-center">
        Notifications
        <span class="badge bg-danger" id="counter">0</span>
      </h4>

      <ul id="notifylist"></ul>
    </div>
  </body>
  <script>
    const webSocket = new WebSocket("ws://localhost:8000/notifications/")
    webSocket.onclose = function (e) {
      console.error("Chat socket closed unexpectedly")
    }
    webSocket.onopen = function (e) {
      webSocket.send(JSON.stringify({ userID: 1 }))
    }
    webSocket.onmessage = function (action) {
      const data = JSON.parse(action.data)
      console.log(data.event == "Notification", data)
      const nl = document.querySelector("#notifylist")
      if (data.event == "Notification") {
        var counter = document.getElementById("counter")
        counter.innerText = data.unread_count
        var el = document.createElement("li")
        el.innerHTML = `<b>New Notification </b>: ${data.text}!`
        nl.appendChild(el)
      }
    }
  </script>
</html>
```

Now make migrations, migrate, **createsuperuser** and runserver. You should see something like below.

```bash
starting ASGI/Channels version 3.0.4 development server at http://127.0.0.1:8000/
```

Open django shell `python3 manage.py shell` along with open `http://127.0.0.1:8000` on a browser. And run the following on your django shell.

```bash
from ibalert.models import Notifications
Notificatons.objects.create(text='hello there!', user_id=1)
```

You should see new notification on your browser.