diff --git a/src/webqueue2api/parser/queue.py b/src/webqueue2api/parser/queue.py index 2c7a135..01bf783 100644 --- a/src/webqueue2api/parser/queue.py +++ b/src/webqueue2api/parser/queue.py @@ -1,9 +1,19 @@ -import os +import os, re from .item import Item -from .utilities import isValidItemName + + +#------------------------------------------------------------------------------# +# Configuration +#------------------------------------------------------------------------------# queueDirectory = "/home/pier/e/queue/Mail" +queuesToIgnore = ["archives", "drafts", "inbox", "coral"] + + +#------------------------------------------------------------------------------# +# Classes +#------------------------------------------------------------------------------# class Queue: """A collection of items. @@ -65,4 +75,88 @@ def __len__(self) -> int: return len(self.items) def __repr__(self) -> str: - return f'{self.name}_queue' \ No newline at end of file + return f'{self.name}_queue' + + + +#------------------------------------------------------------------------------# +# Utilities +#------------------------------------------------------------------------------# +def isValidItemName(name: str) -> bool: + """Returns true if file name is a valid item name + + Example: + isValidItemName("21") -> true + isValidItemName("twentyone") -> false + + Args: + name (str): The name to test. + + Returns: + bool: Name is valid item name. + """ + itemPattern = re.compile("^[0123456789]{1,3}$") + return True if itemPattern.match(name) else False + +def getValidQueues() -> list: + """Returns a list of queues on the filesystem excluding ignored queues. + + Example: + ["bidc", "me", "ce"] + + Returns: + list: Valid queues + """ + queues = [] + + for file in os.listdir(queueDirectory): + currentFile = queueDirectory + "/" + file + isDirectory = os.path.isdir(currentFile) + isValid = file not in queuesToIgnore + + if isDirectory and isValid: + queues.append(file) + + return queues + +def getQueueCounts() -> list: + """Returns a list of dictionaries with the number of items in each queue. + + Example: + [ + { + name: "me", + number_of_items: 42 + }, + { + name: "bidc", + number_of_items: 3 + } + ] + + Returns: + list: Dictionaries with the number of items in each queue. + """ + queueInfo = [] + for queue in getValidQueues(): + possibleItems = os.listdir(queueDirectory + "/" + queue) + validItems = [isValidItemName for file in possibleItems] + queueInfo.append( {"name": queue, "number_of_items": len(validItems)} ) + + # Sorts list of queue info alphabetically + sortedQueueInfo = sorted(queueInfo, key = lambda queueInfoList: queueInfoList['name']) + + return sortedQueueInfo + +def loadQueues() -> list: + """Return a list of Queues for each queue. + + Returns: + list: list of Queues for each queue. + """ + queues = [] + + for queue in getValidQueues(): + queues.append(Queue(queue)) + + return queues \ No newline at end of file diff --git a/src/webqueue2api/parser/utilities.py b/src/webqueue2api/parser/utilities.py deleted file mode 100644 index e0f7b73..0000000 --- a/src/webqueue2api/parser/utilities.py +++ /dev/null @@ -1,92 +0,0 @@ -"""A collection of utilities to be used throughout the webqueue2 API. -""" -import re, os - - -#------------------------------------------------------------------------------# -# Configuration -#------------------------------------------------------------------------------# -queueDirectory = "/home/pier/e/queue/Mail" - - - -def isValidItemName(name: str) -> bool: - """Returns true if file name is a valid item name - - Example: - isValidItemName("21") -> true - isValidItemName("twentyone") -> false - - Args: - name (str): The name to test. - - Returns: - bool: Name is valid item name. - """ - itemPattern = re.compile("^[0123456789]{1,3}$") - return True if itemPattern.match(name) else False - -queuesToIgnore = ["archives", "drafts", "inbox", "coral"] -def getValidQueues() -> list: - """Returns a list of queues on the filesystem excluding ignored queues. - - Example: - ["bidc", "me", "ce"] - - Returns: - list: Valid queues - """ - queues = [] - - for file in os.listdir(queueDirectory): - currentFile = queueDirectory + "/" + file - isDirectory = os.path.isdir(currentFile) - isValid = file not in queuesToIgnore - - if isDirectory and isValid: - queues.append(file) - - return queues - -def getQueueCounts() -> list: - """Returns a list of dictionaries with the number of items in each queue. - - Example: - [ - { - name: "me", - number_of_items: 42 - }, - { - name: "bidc", - number_of_items: 3 - } - ] - - Returns: - list: Dictionaries with the number of items in each queue. - """ - queueInfo = [] - for queue in getValidQueues(): - possibleItems = os.listdir(queueDirectory + "/" + queue) - validItems = [isValidItemName for file in possibleItems] - queueInfo.append( {"name": queue, "number_of_items": len(validItems)} ) - - # Sorts list of queue info alphabetically - sortedQueueInfo = sorted(queueInfo, key = lambda queueInfoList: queueInfoList['name']) - - return sortedQueueInfo - - -def loadQueues() -> list: - """Return a list of Queues for each queue. - - Returns: - list: list of Queues for each queue. - """ - queues = [] - - for queue in getValidQueues(): - queues.append(Queue(queue)) - - return queuesG \ No newline at end of file