monday-item-parser is a library used to define Monday items structure in a specific board, and lets the user fetch, create, update and delete items from this board.
Project description
Monday Item Parser
Introduction
Monday Item Parser is a library used to define Monday items structure in a specific board, and lets the user fetch, create, update and delete items from this board.
Installation
pip install monday-item-parser
Requirements
- Python >= 3.7
- Monday library for the Mondayhttp client
Changelog
- 0.2.5 (2022-03-30) - Added mirror field to readme.
- 0.2.4 (2022-03-30) - Added support for mirror (lookup) fields.
- 0.2.3 (2021-01-16) - Same as 0.2.2, but got some problems with PyPI and Github Workflows again. :(
- 0.2.2 (2021-01-16) - Added support for search items by column value
- 0.2.1 (2021-01-16) - Added hooks for field values.
- 0.2.0 (2021-01-14) - Updated the item's field value set method to be explicit (without calling
.value
) - 0.1.2 (2021-01-13) - Fixed a small bug in the
Item::__init__
function - 0.1.1 (2021-01-13) - Still first release, but got some problems with PyPI and Github Workflows
- 0.1.0 (2021-01-13) - First release
How to use
Items
Items are the full board item structure, built from fields.
from monday import MondayClient
from monday_item_parser import Item, CheckboxField
board_id = 1234
monday_client = MondayClient("MONDAY_API_KEY_HERE")
class MyItem(Item, board_id=board_id, monday_client=monday_client):
checkbox_example = CheckboxField()
# Can be declared either as a type or as an instance, so this is good as well:
checkbox_example = CheckboxField
NOTE: The variables in your item class must be named EXACTLY the same as in your monday board but in lower-case and replace spaces into underscore. For example a column in Monday with the name My Nice Column
will must be defined in your item class my_nice_column
.
Fetch items from board
>>> for item in ExampleItem.fetch_items_from_board():
>>> print(item)
Fetch items by column value
You can fetch all of the items from board by a specific column value filter.
# Let's filter all of the items with a Status column named "status_example" that holds the label "Done"
for item in ExampleItem.fetch_items_by_column_value(status_example="Done"):
print(item)
More info about supported and unsupported fields you can search by here.
Field Type | Field Value to Search By |
---|---|
Text | str The text to search |
Status | str The label to search |
Numbers | Either int or float . The value to search |
Date | datetime.datetime The date (year, month and day) to search by |
Phone | Phone (internal library class) The phone number to search by |
Country | str The country code to search by |
str The email to search by |
|
Timeline | Timeline (internal library class) The start and end date to search by |
Link | Link (internal library class) The display text (not the actual url link) to search by |
Mirror | str The text to search |
Create Item
NOTE: You can only create an item that isn't fetched from the board / already created using this exact function. If you want to create a new item that was fetched from the board you should use the duplicate_item
function
>>> item = MyItem(checkbox_example=True)
>>> item.name = "My First Example"
>>> item.create_item()
Duplicate Item
NOTE: You can only duplicate an item that was fetched from the board / created by the create_item
function.
>>> new_item = item.duplicate_item()
Update Item
NOTE: You can only update an item that was fetched from the board / created by the create_item
function.
>>> new_item.name = 'Updated Item'
>>> new_item.checkbox_example = False
>>> new_item.update_item()
Delete Item
NOTE: You can only delete an item that was fetched from the board / created by the create_item
function.
>>> new_item.delete_item()
Get Group Ids in Board
>>> for group_id in ItemExample.fetch_group_ids():
>>> print(group_id)
"topics"
"group_title"
Hook Field Values
A hook can be registered for whenever the value on a specific field is changed.
from monday_item_parser import *
class ItemWithFieldHook(Item, monday_client=client, board_id=testing_board_id):
status_example = StatusField
checkbox_example = CheckboxField
@field_updated_hook(status_example)
def status_example_hook(self):
if self.status_example.value is not None:
# In the hook you must update the value with the
# `.value` attribute if you don't want to trigger the hook again
self.status_example.value += 1
else:
self.status_example.value = 0
item = ItemWithFieldHook()
# Trigger the hook by setting the value WITHOUT the `.value` attribute
item.status_example = 5
assert item.status_example.value == 6
Fields
Field is actually an Monday board's item column. The currently supported types are:
Monday Column Type | Library Class Name |
---|---|
Checkbox | CheckboxField |
Country | CountryField |
Date | DateField |
EmailField |
|
Link | LinkField |
Number | NumberField |
People | PeopleField |
Phone | PhoneField |
Status | StatusField |
Tags | TagsField |
Text | TextField |
Timeline | TimelineField |
Mirror | MirrorField |
Full Example
class ItemExample(Item, monday_client=client, board_id=testing_board_id):
status_example = StatusField
date_example = DateField
checkbox_example = CheckboxField
country_example = CountryField
email_example = EmailField
link_example = LinkField
numbers_example = NumberField
people_example = PeopleField
phone_example = PhoneField
tags_example = TagsField
text_example = TextField
timeline_example = TimelineField
mirror_example = MirrorField
item = ItemExample()
# Setting the values of an item
item.item_name = "Aviv Atedgi"
item.status_example = "Working on it"
item.date_example = datetime.now()
item.checkbox_example = True
item.country_example = "IL"
item.email_example = "aviv.atedgi2000@gmail.com"
item.link_example.value.url = "https://www.github.com/avivatedgi"
item.link_example.value.text = "My Github Profile"
item.link_example = LinkField(url="https://www.google.com", text="Google It")
item.numbers_example = 192.4
item.people_example = [Person(25200525)]
item.phone_example.value.country_code = "IL"
item.phone_example.value.phone = "0501234567"
item.phone_example = PhoneField(phone="12123123123", country_code="US")
item.tags_example = [12808387]
item.text_example = "My Cool Text Example"
item.timeline_example.value.start = datetime.strptime("2000-05-01", "%Y-%m-%d")
item.timeline_example.value.end = datetime.now()
item.timeline_example = TimelineField(
start=datetime.strptime("2005-04-12", "%Y-%m-%d"),
end=datetime.now(),
)
# Getting the values of an item
print("Status Example =", item.status_example.value)
print("Date Example =", item.date_example.value)
print("Checkbox Example =", item.checkbox_example.value)
print("Country Example =", item.country_example.value)
print("Email Example =", item.email_example.value)
print("Link Example URL =", item.link_example.value.url)
print("Link Example Text =", item.link_example.value.text)
print("Numbers Example =", item.numbers_example.value)
print("People Example =", item.people_example.value)
print("Phone Example Country Code =", item.phone_example.value.country_code)
print("Phone Example Phone Number =", item.phone_example.value.phone)
print("Tags Example =", item.tags_example.value)
print("Text Example =", item.text_example.value)
print("Timeline Example Start Date =", item.timeline_example.value.start)
print("Timeline Example End Date =", item.timeline_example.value.end)
print("Mirror Example = ", item.mirror_example.value)
Special Thanks
- Hydration (Michael Shustin) For the idea of the items metaclass
- Monday (ProdPerfect) For the Monday client use in the library
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file monday-item-parser-0.2.5.tar.gz
.
File metadata
- Download URL: monday-item-parser-0.2.5.tar.gz
- Upload date:
- Size: 27.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.26.0 requests-toolbelt/0.9.1 urllib3/1.26.6 tqdm/4.63.1 importlib-metadata/4.0.1 keyring/21.8.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d2f5058f0caa75f2b202a61c2cee9a65d6ac7ba0a3b006b86c0fda37de6d332 |
|
MD5 | 5673cdab32a55e4955fd9e339192e914 |
|
BLAKE2b-256 | bbcf0e6a3010774766fa97d2c01704804b0bc56c84c2d8e6f925757f18e95c00 |