14.2.68. camcops_server.cc_modules.cc_exportmodels

camcops_server/cc_modules/cc_exportmodels.py


Copyright (C) 2012-2019 Rudolf Cardinal (rudolf@pobox.com).

This file is part of CamCOPS.

CamCOPS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

CamCOPS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with CamCOPS. If not, see <http://www.gnu.org/licenses/>.


Define models for export functions (e.g. HL7, file-based export).

class camcops_server.cc_modules.cc_exportmodels.ExportedTask(recipient=None, task=None, basetable=None, task_server_pk=None, *args, **kwargs)[source]

Class representing an attempt to exported a task (as part of a ExportRun to a specific camcops_server.cc_modules.cc_exportrecipient.ExportRecipient.

Can initialize with a task, or a basetable/task_server_pk combination.

Parameters:

(However, we must also support a no-parameter constructor, not least for our merge_db() function.)

abort(msg: str) → None[source]

Record failure, and why.

(Called abort not fail because PyCharm has a bug relating to functions named fail: https://stackoverflow.com/questions/21954959/pycharm-unreachable-code.)

Parameters:msg – why
cancel() → None[source]

Marks the task export as cancelled/invalidated.

May trigger a resend (which is the point).

export(req: CamcopsRequest) → None[source]

Performs an export of the specific task.

Parameters:req – a camcops_server.cc_modules.cc_request.CamcopsRequest
export_file(filename: str, text: str = None, binary: bytes = None, text_encoding: str = 'utf8') → bool[source]

Exports a file.

Parameters:
  • filename
  • text – text contents (specify this XOR binary)
  • binary – binary contents (specify this XOR text)
  • text_encoding – encoding to use when writing text

Returns: was it exported?

filegroup

Returns a ExportedTaskFileGroup, creating it if necessary.

finish() → None[source]

Records the finish time.

init_on_load() → None[source]

Called when SQLAlchemy recreates an object; see https://docs.sqlalchemy.org/en/latest/orm/constructors.html.

succeed() → None[source]

Register success.

task

Returns the associated task.

classmethod task_already_exported(dbsession: sqlalchemy.orm.session.Session, recipient_name: str, basetable: str, task_pk: int) → bool[source]

Has the specified task already been successfully exported?

Parameters:
  • dbsession – a sqlalchemy.orm.session.Session
  • recipient_name
  • basetable – name of the task’s base table
  • task_pk – server PK of the task
Returns:

does a successful export record exist for this task?

class camcops_server.cc_modules.cc_exportmodels.ExportedTaskEmail(exported_task=None)[source]

Represents an individual email export.

Parameters:exported_taskExportedTask object
export_task(req: CamcopsRequest) → None[source]

Exports the task itself to an email.

Parameters:req – a camcops_server.cc_modules.cc_request.CamcopsRequest
class camcops_server.cc_modules.cc_exportmodels.ExportedTaskFileGroup(exported_task=None)[source]

Represents a small set of files exported in relation to a single task.

Parameters:exported_taskExportedTask object
abort(msg: str) → None[source]

Record failure, and why.

(Called abort not fail because PyCharm has a bug relating to functions named fail: https://stackoverflow.com/questions/21954959/pycharm-unreachable-code.)

Parameters:msg – why
export_file(filename: str, text: str = None, binary: bytes = None, text_encoding: str = 'utf8') → False[source]

Exports the file.

Parameters:
  • filename
  • text – text contents (specify this XOR binary)
  • binary – binary contents (specify this XOR text)
  • text_encoding – encoding to use when writing text
Returns:

was it exported?

Return type:

bool

export_task(req: CamcopsRequest) → None[source]

Exports the task itself to a file.

Parameters:req – a camcops_server.cc_modules.cc_request.CamcopsRequest
finish_run_script_if_necessary() → None[source]

Completes the file export by running the external script, if required.

note_exported_file(*filenames) → None[source]

Records a filename that has been exported, or several.

Parameters:*filenames – filenames
succeed() → None[source]

Register success.

class camcops_server.cc_modules.cc_exportmodels.ExportedTaskHL7Message(exported_task=None, *args, **kwargs)[source]

Represents an individual HL7 message.

Must support parameter-free construction, not least for merge_db().

abort(msg: str, diverted_not_sent: bool = False) → None[source]

Record that we failed, and so did our associated task export.

(Called abort not fail because PyCharm has a bug relating to functions named fail: https://stackoverflow.com/questions/21954959/pycharm-unreachable-code.)

Parameters:
  • msg – reason for failure
  • diverted_not_sent – deliberately diverted (and not counted as sent) rather than a sending failure?
divert_to_file(req: CamcopsRequest) → None[source]

Write an HL7 message to a file. For debugging.

Parameters:req – a camcops_server.cc_modules.cc_request.CamcopsRequest
export_task(req: CamcopsRequest) → None[source]

Exports the task itself to an HL7 message.

Parameters:req – a camcops_server.cc_modules.cc_request.CamcopsRequest
init_on_load() → None[source]

Called when SQLAlchemy recreates an object; see https://docs.sqlalchemy.org/en/latest/orm/constructors.html.

make_hl7_message(req: CamcopsRequest) → None[source]

Makes an HL7 message and stores it in self._hl7_msg.

May also store it in self.message (which is saved to the database), if we’re saving HL7 messages.

See

static ping_hl7_server(recipient: camcops_server.cc_modules.cc_exportrecipient.ExportRecipient) → bool[source]

Performs a TCP/IP ping on our HL7 server; returns success. If we’ve already pinged successfully during this run, don’t bother doing it again.

(No HL7 PING method yet. Proposal is http://hl7tsc.org/wiki/index.php?title=FTSD-ConCalls-20081028 So use TCP/IP ping.)

Parameters:recipient – an camcops_server.cc_modules.cc_exportrecipient.ExportRecipient
Returns:success
Return type:bool
succeed(now: pendulum.datetime.DateTime = None) → None[source]

Record that we succeeded, and so did our associated task export.

static task_acceptable_for_hl7(recipient: camcops_server.cc_modules.cc_exportrecipient.ExportRecipient, task: Task) → bool[source]

Is the task valid for HL7 export. (For example, anonymous tasks and tasks missing key ID information may not be.)

Parameters:
Returns:

valid?

Return type:

bool

transmit_hl7() → None[source]

Sends the HL7 message over TCP/IP.

valid() → bool[source]

Checks for internal validity; returns a bool.

camcops_server.cc_modules.cc_exportmodels.gen_exportedtasks(collection: camcops_server.cc_modules.cc_taskcollection.TaskCollection) → Generator[[_ForwardRef('ExportedTask'), NoneType], NoneType][source]

Generates task export entries from a collection.

Parameters:collection – a camcops_server.cc_modules.cc_taskcollection.TaskCollection
Yields:ExportedTask objects
camcops_server.cc_modules.cc_exportmodels.gen_tasks_having_exportedtasks(collection: camcops_server.cc_modules.cc_taskcollection.TaskCollection) → Generator[[_ForwardRef('Task'), NoneType], NoneType][source]

Generates tasks from a collection, creating export logs as we go.

Used for database exports.

Parameters:collection – a camcops_server.cc_modules.cc_taskcollection.TaskCollection
Yields:camcops_server.cc_modules.cc_task.Task objects
camcops_server.cc_modules.cc_exportmodels.get_collection_for_export(req: CamcopsRequest, recipient: camcops_server.cc_modules.cc_exportrecipient.ExportRecipient, via_index: bool = True, debug: bool = False) → camcops_server.cc_modules.cc_taskcollection.TaskCollection[source]

Returns an appropriate task collection for this export recipient, namely those tasks that are desired and (in the case of incremental exports) haven’t already been sent.

“Not already sent” means “not already sent to an export recipient with the same name (even if other aspects of the export recipient have changed)”.

Parameters:
Returns:

a camcops_server.cc_modules.cc_taskcollection.TaskCollection