def request_events():
    yield [
        RequestCreateEvent("a/1", {"a": 1}),
        RequestDeleteEvent("b/2"),
        RequestUpdateEvent("a/1", {"a": None, "b": [1, True]}),
        RequestRestoreEvent("b/2"),
    ]
 def create_event(self, event: Dict[str, Any]) -> BaseRequestEvent:
     type = event["type"]
     fqid = event["fqid"]
     request_event: BaseRequestEvent
     if type == "create":
         request_event = RequestCreateEvent(fqid, event["fields"])
     elif type == "update":
         request_event = RequestUpdateEvent(fqid, event["fields"])
     elif type == "delete":
         request_event = RequestDeleteEvent(fqid)
     elif type == "restore":
         request_event = RequestRestoreEvent(fqid)
     else:
         raise BadCodingError()
     return request_event
def test_writer_distribution(writer, database, occ_locker, event_translator):
    events = [RequestCreateEvent("a/1", {"a": 1}), RequestDeleteEvent("b/2")]
    locked_fields = {
        "c/1": 3,
        "c/2/f": 4,
        "c/f": 5,
    }
    write_request = WriteRequest(events, {}, 1, locked_fields)
    event_translator.translate = MagicMock(return_value=[2, 3, 4])
    writer.propagate_updates = pu = MagicMock()

    writer.write(write_request)

    event_translator.translate.assert_called_with(events)
    database.get_context.assert_called()
    occ_locker.assert_fqid_positions.assert_called_with({"c/1": 3})
    occ_locker.assert_fqfield_positions.assert_called_with({"c/2/f": 4})
    occ_locker.assert_collectionfield_positions.assert_called_with({"c/f": 5})
    database.insert_events.assert_called_with([2, 3, 4], {}, 1)
    pu.assert_called_once()
    events_count = connection.query_single_value(
        "SELECT COUNT(*) FROM events LIMIT 1", []
    )
    if events_count:
        if len(sys.argv) > 1 and sys.argv[1] == "-f":
            print("Warning: database is not empty! Executing anyway...")
        else:
            print("Error: Some events are already present, aborting.")
            sys.exit(1)

path = env_service.get("DATASTORE_INITIAL_DATA_FILE")

if path.startswith("http://") or path.startswith("https://"):
    file = request.urlopen(path)
else:
    file = open(path)

data = json.loads(file.read())

events: List[BaseRequestEvent] = []
for collection, models in data.items():
    for model in models:
        fqid = build_fqid(collection, model["id"])
        event = RequestCreateEvent(fqid, model)
        events.append(event)

write_request = WriteRequest(events, None, 0, {})
writer.write(write_request)

print(f"Wrote {len(events)} events to the datastore.")
def test_create_prune_none():
    field_data = {"none": None}

    event = RequestCreateEvent("a/1", field_data)

    assert event.fields == {}
def get_dummy_request_events():
    return [RequestCreateEvent("c/1", {"a": 1})]