-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #87 from IDEMSInternational/feat/campaigns
Support for campaigns
- Loading branch information
Showing
23 changed files
with
637 additions
and
90 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
from parsers.common.rowparser import ParserModel | ||
from pydantic import validator | ||
from typing import List | ||
|
||
class CampaignEventRowModel(ParserModel): | ||
uuid: str = '' | ||
offset: str | ||
unit: str | ||
event_type: str | ||
delivery_hour: str = '' | ||
message: str = '' | ||
relative_to: str | ||
start_mode: str | ||
flow: str = '' | ||
base_language: str = '' | ||
|
||
@validator('unit') | ||
def validate_unit(cls, v): | ||
if v not in ['M', 'H', 'D', 'W']: | ||
raise ValueError('unit must be M (minute), H (hour), D (day) or W (week)') | ||
return v | ||
|
||
@validator('start_mode') | ||
def validate_start_mode(cls, v): | ||
if v not in ['I', 'S', 'P']: | ||
raise ValueError("start_mode must be I (interrupt current flow), S (skip event if in flow) or P (send message and don't affect flow)") | ||
return v | ||
|
||
@validator('event_type') | ||
def validate_event_type(cls, v): | ||
if v not in ['M', 'F']: | ||
raise ValueError('event_type must be F (flow) or M (message)') | ||
return v |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import importlib | ||
from collections import OrderedDict | ||
from .campaigneventrowmodel import CampaignEventRowModel | ||
from rapidpro.models.campaigns import Campaign, CampaignEvent | ||
|
||
from logger.logger import get_logger, logging_context | ||
|
||
LOGGER = get_logger() | ||
|
||
|
||
class CampaignParser: | ||
def __init__(self, name, group_name, rows): | ||
self.campaign = Campaign(name, group_name=group_name) | ||
self.rows = rows | ||
|
||
def parse(self): | ||
for row_idx, row in enumerate(self.rows): | ||
with logging_context(f"row {row_idx+2}"): | ||
message = None | ||
base_language = None | ||
if row.message: | ||
message = {"eng" : row.message} | ||
base_language = row.base_language or "eng" | ||
delivery_hour = -1 | ||
if row.delivery_hour: | ||
delivery_hour = int(row.delivery_hour) | ||
try: | ||
event = CampaignEvent( | ||
int(row.offset), row.unit, row.event_type, delivery_hour, row.start_mode, | ||
relative_to_label=row.relative_to, flow_name=row.flow or None, | ||
message=message, base_language=base_language) | ||
self.campaign.add_event(event) | ||
except ValueError as e: | ||
LOGGER.critical(str(e)) | ||
return self.campaign |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.