Git Product home page Git Product logo

rwslib's Introduction

rwslib

The Goal of this library is to provide a (programmer) friendly client library to Rave Web Services (RWS).

Philosophy

rwslib provides a convenient interface to RWS without hiding the implementation details. For instance, using rwslib you should have a simple way to request a list of studies from RWS but still be able to get to the HTTP headers, content body etc returned by RWS.

Documentation

Documented with Sphinx. See http://rwslib.readthedocs.org/en/latest/

rwslib's People

Contributors

anewbigging avatar anewbigging-trialgrid avatar bagerard avatar davecharles avatar dpes avatar glow-mdsol avatar iansparks avatar isparks avatar isparks-tg avatar rsayer-mdsol avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rwslib's Issues

How to retrieve definition of form field variable format rules?

Hello,

I need some help to understand format rules and how to get them via rwslib?
Heigh field (M_VSSTAT_HEIGHT) has a format of "$10". Where and how i can get these rules via rwelib so, we can have client side validations also?

We have seen different formats like $10, $10.4, 6, 3 etc etc
image

RWSPostErrorResponse - used anywhere?

Is RWSPostErrorResponse used at all when POST requests fail? I see that it has some tests written for it and is referenced in the docs, but I don't see it actually returned as a part of an Exception anywhere.

Unit Test

class TestRWSPostErrorResponse(unittest.TestCase):

Class Definition

class RWSPostErrorResponse(RWSResponse):

Docs
https://github.com/mdsol/rwslib/blob/develop/docs/source/post_clinical_data.rst#postdatarequestodm_data

innovate backend seems not compatibile with rwslib

Hi all,

when I do this:

r.send_request(AuditRecordsRequest('Mediflex', 'DEV', per_page=1000000, startid=1))
->
https://innovate.mdsol.com/RaveWebServices/datasets/ClinicalAuditRecords.odm?studyoid=Mediflex%28DEV%29&startid=1&per_page=1000000
->
{'Content-Encoding': 'gzip', 'Transfer-Encoding': 'chunked', 'Set-Cookie': 'MedidataRave=1946950572.20480.0000; path=/', 'X-AspNet-Version': '4.0.30319', 'Vary': 'Accept-Encoding', 'X-Powered-By': 'ASP.NET', 'Server': 'Microsoft-IIS/7.5', 'Link': 'https://innovate.mdsol.com/RaveWebServices/datasets/ClinicalAuditRecords.odm?studyoid=Mediflex%28DEV%29&startid=8256305&per_page=1000000; rel="next"', 'X-AspNetMvc-Version': '3.0', 'Cache-Control': 'private, s-maxage=0', 'Date': 'Wed, 13 Apr 2016 07:42:36 GMT', 'Content-Type': 'text/xml'}

startid is not taken into account I think,
Thanks
d.

Regarding list of data in the versioned CRF for a subject

Hi,
I am trying to retrieve list of forms/folders added from Medidata UI via the API.
The list of folders shown in the subject administration is not visible from the dataset API (/studies/Mediflex(Dev)/subjects/{ subjectkey }/datasets/raw). Once you save a form within one of those folders than only the forms saved would be visible.
\Is their a way to retrieve metadata/folder added for a subject like how it appears in subject administration? The raw/regular API does not list them or is there a subject metadata API for a study which shows it?

How to get startid from AuditRecordsRequest response

https://rwslib.readthedocs.io/en/latest/odm_adapter.html#auditrecordsrequest-project-name-environment-name

audits = r.send_request(AuditRecordsRequest('MEDIFLEX','DEV'))

I don't see a way to get startid which can be used with subsequent AuditRecordsRequest calls. Please suggest how to get startid value which is (startid=1 | The audit ID to start on. Defaults to 1. The first Audit ID)

Sample response of audits -

2020-09-24T16:19:49 6781448 2020-09-24T16:19:49 6781449

Fetching Dynamic Search List

On a eCRF, we have a DSL (Dynamic Search List) field. How, we can get list items dynamically ?

  <ItemDef OID="AE_SAE_XX01.M_AEPID" Name="M_AEPID" DataType="text" mdsol:VariableOID="M_AEPID" Length="180" mdsol:Active="Yes" mdsol:ControlType="Dynamic SearchList" mdsol:IndentLevel="2" mdsol:SourceDocument="Yes" mdsol:SASLabel="Related AE Record" mdsol:Visible="Yes">

Biostat API ProjectMetaDataRequest(project_name) is missing environment parameter

Dear Team,

I noticed that the API : ProjectMetaDataRequest(project_name) from Biostat is missing an environment parameter.

Explained here: https://rwslib.readthedocs.io/en/latest/biostats_gateway.html#projectmetadatarequest-project-name

How can we know that the metadata is coming in from which environment? AFAIK, we can have multiple amendments in Dev, while the UAT and PROD can remain intact.

Please let me know if I am missing anything here.

Thank you.

How to obtain query list on itemdata

Hello:
I am now requesting queries on itemdata. Reading the all docs, can not find the method to request queries, just see the queries in item data as the additional attribute. If can, please tell me how to obtain them. Thanks a lot ~~

Handling ALS skip logic

In ALS spreadsheet -> checks has conditional skip logic. I have 2 sample example below -
Is there a tool, API or way to load or parse these checks for application to understand these checks? Any idea or guidance would be of great help -

If A_DX_IRTDAT in Subject with record position 0 IsPresent then... set datapoint value for X_ENROLLYN in Subject with record position 0 to YES

If X_CMYN in Prior and Concomitant Medications Prompt with record position 0 IsEqualTo YES then... add the "Concomitant Medications" form to the current folder

Not returning the specify value

for any Other,specify value rwslib is not returning the specify content, it's only returning the coded value under item_value. However, specify is present as an attribute in item. Am I doing something wrong?

audit_event: rwslib.extras, how to fetch datapage_name and Log#

I am working on audit data using audit_event. I want to fetch audit records for Entered and DataChanged event. I am able to get all the desired column except datapage_name. Can you please guide me on how I can get that. I have used below code-

class Subjects(object):
def init(self):
self.subjects = []

def Entered(self, context):
    """Capture the Entered event"""
    self.study_oid = context.study_oid
    self.subcategory = context.subcategory
    self.subject_name= context.subject.name
    self.event = context.event.oid
    self.event_rpt=context.event.repeat_key
    self.form_oid = context.form.oid
    **self.form_n=context.form.datapage_name**---this is not working.
    self.form_rpt=context.form.repeat_key

Additionally, If I want to add log #(0, for standard form and respective log position for Log forms) for the each record. how I can achieve that.

Thanks a lot.

Performance and Load Tips

Do you have any tips or ideas concerning the various possible data consumption patterns enabled by RWS?

For example, I am faced with 10 distinct eCRFs (forms) that contain data relevant to me. They are similar, structurally, but not identical. To process the data I need, I could:

  • Loop through the subjects and use a SubjectDatasetRequest for each subject, reading out only the XML nodes that are of interest
  • Loop through the subjects and, for each subject, loop through form-constrained SubjectDatasetRequests
  • Loop through the forms, using FormDataRequest for each form, consuming the data in either XML or CSV

I think any of those patterns could be made to work for me, though maybe some are more elegant than others, but I'd like to have minimal impact on the environment. I'm given to understand the RWS service uses the same computing resources as the regular browser UI, and I cannot take away any responsiveness for the end users. I'm unaware of any benchmarks about how RWS use affects the users though. Still you can imagine that if we have 100 subjects, each of which has, possibly, 10 forms worth of data, you end up with quite a few service calls in a fairly short time.

My guess is that using the FormDataRequest is going to be most efficient, probably using the XML output , given that this pattern appears to use the fewest service calls. There's a lot I don't know about Medidata internals, caching and optimization so I could easily be wrong (e.g. the database indexing does not support Form-oriented lookups as well as subject-oriented lookups so the form lookups end up being much more expensive).

Any advice? I can't necessarily just delay until the dead of night... OR, is this all unnecessary fretting? Should I stop worrying as long as I keep the service calls down to a dull roar?

Incompatible with Python 3

This is not a problem for me, since I can easily use Python 2, but it's worth noting. Python 3 does not work with this library as packaged on PyPi. The main problem appears to be ImportErrors for urlencode. Python 3 has a different import path. I think the following resolves it:

try:
    from urllib import urlencode
except ImportError:
    from urllib.parse import urlencode

There are also some Python2 print statements--as opposed to the Python3 print() function. Converting those to the function syntax should work for Python2 and Python3.

There may be other problems, but I have not had time to delve into it. My guess is that there could be some problems around encoding, since Python3 handles unicode text vs bytes somewhat differently. Perhaps all of this could be shimmed into place with the six module.

LOCATION OID Issue

We are using an IWRS and eCOA integrations which uses RWS exchange. We have a single Medidata rave URL because of which site number can only be used more than once. IWRS and eCOA have used LOCATION OID as Site Number for integrations because of which integration is not successfull as the same site numbers have already been used in another study. I have the below suggestions. can you please comment if it would work or help me with a possible solution.

  1. Can we append the study number to the site Number. Example if the study is ABC_01 and the site number is 00001, to make it unique we add ABC_01_00001(Study_Sitenumber) and update this in the integration spec for location OID will the integration be successful? i would assume this ABC_01_00001(Study_Sitenumber) will have to to be updated in the code as the target location correct?

  2. Can Study site number be used as a Location OID?

Should I cache RWSConnection objects?

Hello,

I have a multi-threaded app. Each time something is sent to RAVE, my app creates a new RWSConnection. This is probably inefficient. Are there reasons to not cache this object and reuse it?

Should I cache one RWSConnection per thread and reuse it? Or can all threads use the same instance?

Thank you!

Record restricted by max limit

Hi

CRF has 2 loglines pre-populated and i am trying to build clinical payload to update those loglines but getting error as below -
RWSException error
e.rws_error.error_client_response_message - Record restricted by max limit
e.rws_error.error_origin_location - /ODM/ClinicalData[1]/SubjectData[1]/StudyEventData[1]/FormData[1]/ItemGroupData[2]
e.rws_error.reason_code - RWS00088

Please suggest what is wrong as form has 3 sections -

  1. non-logline Item Group as XXX_GEN_U01_C_PK01_S01
  2. 2 logline items group as XXX_GEN_U01_C_PK01_S01_LOG_LINE

<ODM xmlns:mdsol="http://www.mdsol.com/ns/odm/metadata" xmlns="http://www.cdisc.org/ns/odm/v1.3" FileType="Transactional" Granularity="Metadata" CreationDateTime="2022-03-22T13:14:35.928-00:00" FileOID="19c6ec03-33b8-fdfrr-8e77-667e05709c0a" ODMVersion="1.3"> <ClinicalData StudyOID="Study-Test(DEV)" MetaDataVersionOID="1136"> <SubjectData SubjectKey="001-1111"> <SiteRef LocationOID="00000"/> <StudyEventData StudyEventOID="C1D1" StudyEventRepeatKey="C1D1[1]"> <FormData FormOID="XXX_GEN_U01_C_PK01_S01"> <ItemGroupData ItemGroupOID="XXX_GEN_U01_C_PK01_S01"> <ItemData ItemOID="X_PCPERF_PCALL" Value="YES" /> <ItemData ItemOID="X_PCREASND" IsNull="Yes" /> <ItemData ItemOID="X_PCREASOT" IsNull="Yes" /> <ItemData ItemOID="X_PCREFID" Value="1234" /> <ItemData ItemOID="X_PCSTDAT" Value="18/MAY/2016" /> <ItemData ItemOID="X_PCSTTIM" Value="09:00" /> <ItemData ItemOID="X_PCENDAT" Value="18/MAY/2016" /> <ItemData ItemOID="X_PCENTIM" Value="10:30" /> </ItemGroupData> <ItemGroupData ItemGroupOID="XXX_GEN_U01_C_PK01_S01_LOG_LINE" ItemGroupRepeatKey="@CONTEXT" TransactionType="Upsert"/> <ItemData ItemOID="X_PCCAT" Value="XXXXXX" TransactionType="Upsert"> <ItemData ItemOID="X_PCTEST" Value="YYYYY" TransactionType="Upsert" /> <ItemData ItemOID="X_PCSPEC" Value="ZZZZZZ" TransactionType="Upsert" /> <ItemData ItemOID="X_PCSPID" Value="12" TransactionType="Upsert"/> <ItemData ItemOID="X_PCSTAT" IsNull="Yes" TransactionType="Upsert" /> </ItemGroupData> <ItemGroupData ItemGroupOID="XXX_GEN_U01_C_PK01_S01_LOG_LINE" ItemGroupRepeatKey="@CONTEXT" TransactionType="Upsert"> <ItemData ItemOID="X_PCCAT" Value="XXXXXX" TransactionType="Upsert"/> <ItemData ItemOID="X_PCTEST" Value="YYYYY" TransactionType="Upsert" /> <ItemData ItemOID="X_PCSPEC" Value="ZZZZZZ" TransactionType="Upsert" /> <ItemData ItemOID="X_PCSPID" Value="34" TransactionType="Upsert"/> <ItemData ItemOID="X_PCSTAT" IsNull="Yes" TransactionType="Upsert" /> </ItemGroupData> </FormData> </StudyEventData> </SubjectData> </ClinicalData> </ODM>

Authentication failed

I am trying to create RWS connection to Rave
https://xxx-innovate.imedidata.com/apps/EDC and getting below error with all the combinations.

#rws_connection = RWSConnection('https://xxx-innovate.imedidata.com', 'xxxx', 'yyyy')
#rws_connection = RWSConnection('https://xxx-innovate.imedidata.com/apps/edc/api/v2', 'xxxx', 'yyyy')
#rws_connection = RWSConnection('https://xxx-innovate.imedidata.com/apps/edc', 'xxxx', 'yyyy')

raise RWSException("IIS Error", r.text)

I can login to web instance successfully with the same credential. Please suggest how to create connection as i had tried all options documented at https://rwslib.readthedocs.io/en/latest/getting_started.html?highlight=RWSException#error-handling

Retrieving incremental ODM dataset does not work

Hello,

when making a GET request to https://{host}/RaveWebServices/studies/{study-oid}/datasets/{regular-or-raw}[/{form-oid}][?{query-string-parameters}] with start query param the response is a This service is not implemented [RWS00140]

Does study have to be configured in some particular way to support incremental requests ?

RWSPostErrorResponse not returned in send_request

Hi RWSLib team,

by default an RWSErrorResponse is returned when a request is sent as a PostDataRequest. In case of an error it could be useful to get the attribute ErrorOriginLocation from the class RWSPostErrorResponse.

A patch could be easily applied with a code like that:
if isinstance(request_object, rws_requests.PostDataRequest):
error = rwsobjects.RWSPostErrorResponse(r.text)
errDesc = error.error_client_response_message
else:
error = RWSErrorResponse(r.text)
errDesc = error.errordescription

....

raise RWSException(errDesc, error)

In same time a change could also be done on class RWSPostErrorResponse to harmonize the attribute name reasoncode, to change attribute name reason_code to reasoncode.

Thanks in advance for your support.

Kind regards,
Joel.

OrderNumber should be optional on StudyEventRef SUBJECT and optional on StudyEventDef

When extracting metadata from RWS the SUBJECT StudyEventRef has no OrderNumber (which makes sense since this is an 'artificial' folder, not created by the study designer but there to allow subject-level forms to be specified in the corresponding StudyEventDef). It would be nice if the builders allowed this, but at the moment OrderNumber is required on the StudyEventRef (https://rwslib.readthedocs.io/en/latest/classes.html#rwslib.builders.StudyEventRef).

The StudyEventDef builder does not have an OrderNumber attribute but RWS does export OrderNumber on StudyEventDefs (except the SUBJECT one):

     <Protocol>
        <StudyEventRef StudyEventOID="SUBJECT" Mandatory="Yes" />
        <StudyEventRef StudyEventOID="SCREEN" OrderNumber="1" Mandatory="No" />
      </Protocol>
      <StudyEventDef OID="SUBJECT" Name="Subject" Type="Common" Repeating="No">
        <FormRef FormOID="VISIT" OrderNumber="3" Mandatory="No" />
      </StudyEventDef>
      <StudyEventDef OID="SCREEN" Name="Screening" Type="Common" Repeating="Yes" mdsol:OrderNumber="1">
        <FormRef FormOID="VISIT" OrderNumber="3" Mandatory="No" />

studyEvents and associated CRF per subject

I need to have below requirements -

For a given subject, i need to get list of visits (studyEvents) and associated CRFs per visit.

I had looked into RWSLib and have not found any thing much .. i can see VersionFoldersRequest but it is neither specific to a subject and nor it has CRF information.

Please suggest as i was thinking it may be a very common use case.

Study Does Not Exist error should be an Auth error

When querying through the StudyVersionRequest for a study that definitely exists, I get a Study Does Not Exist error. It seems that I haven't been given Architect rights in that study (querying the /metadata/studies url yields no studies listed, but the /studies url, ie ClinicalStudiesRequest, yields two studies).

The Does Not Exist error is misleading (I spent time trying to figure out how I'd mistyped or mis-encoded the name). It should have returned an authorization error.

Adding unschedule visit

Hello,

I need to add an event of unschedule visit for a subject.
Which API or payload can be used to add an unscheduled visit?
image

CRF form status API

For a given subject, a CRF form can have any one of the below status -

Not Started
In Progress
Submitted
or any other status

Which rwdlib API endpoint can provide the form status? Any help?

Consider improving the default encoding in rwslib library

Hello ๐Ÿ‘‹

First of all, thanks for publishing this library on Github, it's very helpful ! ๐Ÿ‘

I saw the work here to add the possibility to specify the encoding of the response. Do you think the default encoding could be specified in rwslib ?

XML encoding should specified in the body of the XML (and not in the content type) but some response (such as AuditRecordsRequest) are missing the XML declaration. In this case, the requests library used in rwslib is decoding "text/xml" without encoding as "ISO-8859-1" in order to follow RFC2616 which has been made obsolete by RFC 7231.

This leads to wrongly decoded character in our case and there's no real way for the client to know which encoding to use (in our case using utf-8 is solving the issue, but I think we could improve the default in rwslib as it is targeting the Rave Web Services which probably used the same encoding for most response).
My suggestion would be to try to read the encoding in the XML declaration, and fallback to utf-8 (as it's the most widely used ) or Response.appareant-encoding to try to detect it automatically.

I can propose a pull requests with the changes if needed

Regards

How to get StudyEventRepeatKey for subevents

Hello,

We are able to POST clinical data which are associated with screen event.
when the study event visit has subfolders like, cycle1 -> Cycle1Day1 / Cycle1Day3, CRF submission has been failing with .

Looking further, by quering StudyDatasetRequest for already submitted manual crfs, realized that it also needs a StudyEventRepeatKey but i am not sure from where i can get value for StudyEventRepeatKey

I had tried version_folder_request endpoint but can get only reference of C1D01 as below -

image

ODM file also don't have any reference of it so, bit lost.
Any help would be appreciated.

class rwslib.builders.clinicaldata.MdsolQuery does not contain re-query definition

Hello Team,

We were programming the RWS calls using python builders for query opening, cancelling, closing and re-opening on the log fields of AETERM, AESTDAT and AEENDAT in AE form. Please find below the code:

#Declarations
URL1 = 'innovateURL' #Masked
UserID1 = 'ID1' #Masked
Password1 = 'Pass1' #Masked
Study_Name = 'Study' #Masked
Study_Env = 'UAT'
Study_Metadata = '2'
Study_site = '0001' #Masked
Subject_ID = 'TEST0005'
Folderoid_1 = 'AE'
Formoid_1 = 'AE'
ItemGroup_1 = 'AE'
ItemGroup_RepKey = '1'
ItemData1OID = 'AETERM'
ItermData1Value = 'TestItemIgnore'
ItemData2OID = 'AESTDAT'
ItermData2Value = '20 FEB 2020'
ItemData3OID = 'AEENDAT'
ItermData3Value = '25 APR 2020'
ItemDataTransactionTyp = 'Context'

#Query Text String to open
QT1 = 'TestQueryField1'
QT2 = 'TestQueryField2'
QT3 = 'TestQueryField3'

#Query Text Status
QT_Status_Open = QueryStatusType.Open
QT_Status_Close = QueryStatusType.Closed
QT_Status_Cancel = QueryStatusType.Cancelled
QT_Status_Answered = QueryStatusType.Answered
QT_Status_Forward = QueryStatusType.Forwarded

#Query Requires Response(true/false)
QT_ReqResp = 'true'

#Query Text string for the response
QT_Response = 'This is the response of the Query'

#Query Text Recipient
QT_MG = 'Site from DM'

#Query ID from the DB
QT_RepeatKey1='123' #AETERM #Masked
QT_RepeatKey2='456' #AESTDAT #Masked
QT_RepeatKey3='789' #AEENDAT #Masked

#Main Program starts here
rwscon = RWSConnection(URL1, UserID1, Password1)
Odm = ODM("TestData")
Clinical_data = ClinicalData(projectname=Study_Name, environment=Study_Env, metadata_version_oid=Study_Metadata)
subject_data = SubjectData(site_location_oid=Study_site, subject_key=Subject_ID)
event_data = StudyEventData(study_event_oid=Folderoid_1)
form_data = FormData(formoid=Formoid_1)
itemgroup1= ItemGroupData(itemgroupoid =ItemGroup_1, item_group_repeat_key=ItemGroup_RepKey)
itemdata1 = ItemData(itemoid=ItemData1OID, value=ItermData1Value, transaction_type=ItemDataTransactionTyp)
itemdata2 = ItemData(itemoid=ItemData2OID, value=ItermData2Value, transaction_type=ItemDataTransactionTyp)
itemdata3 = ItemData(itemoid=ItemData3OID, value=ItermData3Value, transaction_type=ItemDataTransactionTyp)

#Unomment the query1 variable based on the action needed before running the code.
#To Open Queries
#query1 = MdsolQuery(value=QT1, requires_response = QT_ReqResp, recipient=QT_MG, status=QT_Status_Open)

#To Cancel Queries
#query1 = MdsolQuery(query_repeat_key = QT_RepeatKey1, recipient=QT_MG, status=QT_Status_Cancel)

#To Close Queries
#query1 = MdsolQuery(query_repeat_key = QT_RepeatKey1, recipient=QT_MG, status=QT_Status_Close)

#To Requery, Note enter previous query repeat key
#query1 = MdsolQuery(value=QT1, query_repeat_key = QT_RepeatKey1, requires_response = QT_ReqResp, recipient=QT_MG, status=QT_Status_Open)

itemgroup1 << itemdata1 << query1
Odm << Clinical_data << subject_data << event_data << form_data << itemgroup1
print(str(Odm))
responseobject = rwscon.send_request(PostDataRequest(str(Odm)))
print(str(responseobject))

As per the RWS tutorials in Knowledge Space https://learn.mdsol.com/api/rws/use-field-queries-95587384.html, we find that for re-query action we need the following parameters

  1. PrecedingQueryRepeatKey - Please confirm what this denotes! Is it denoting Query ID of the Response provided or the Initial Query Raised
  2. Query Value - Query Text
  3. Query Status - Open

We observed a few issues with the Re-Query part mainly

  • class rwslib.builders.clinicaldata.MdsolQuery does not contain an attribute for PrecedingQueryRepeatKey for definition

  • when executing the re-query code(mentioned above), we get the RWS error denoting raise RWSException(error.errordescription, error) - RWSException: Query cannot be opened with query repeat key

Could you please confirm if there is an option to re-query (along with requires response) and provide us the snippet for the same.

rwslib with iMedidata

Hello,

I feel like I'm missing some key information in the documentation, but I'll post this issue/question anyway.

I need to use RWS with a client that has moved to iMedidata for user account access. It's not perfectly clear to me how rwslib works in that case.

I have found this in the docs:

Setting Up MAuth for RWS
Important:
You cannot use an iMedidata account with RWS.
To use RWS, you need a local Rave account.
If you need to have a new Rave study authenticated using MAuth with RWS, you must inform a Medidata project manager. 
The project manager sends a request to Medidata Technical Support.
Technical Support follows a predefined Change Management Protocol (CMP) to perform the necessary mAuth key authentication.
Technical Support informs the project manager that the necessary signatures are set up.
The project manager instructs you on the steps you must perform to authenticate using RWS.

So it looks like I cannot use RWSlib in this use case. Is that true?

rave form validation report post PostDataRequest

I have a use case to push clinical data to EDC and then freeze the form.
What i have observed with Rave is -

  1. You can push "non-validated" data to EDC with 200 success response code.
    From non-validated data, i mean that form field interdependencies are not getting validated.
    e.g. if answer for "What is the status of the subject's use of Alcohol substance?" was "NEVER" but had provided details of alcohol consumption.

  2. Now, when you freeze the form post submission, you will see the error as below as it is the time validation logic had been triggered-
    RWSException error
    e.rws_error.error_client_response_message - Freeze not authorized
    e.rws_error.error_origin_location - /ODM/ClinicalData[1]/SubjectData[1]/StudyEventData[1]/FormData[1]/ItemGroupData[1]/ItemData[4]
    e.rws_error.reason_code - RWS00059

What i am exploring is - Is there any rwslib or rave API which can perform validation logic before we push the data to EDC or if PostDataRequest can return all the invalidated scenarios with details?

Any pointer would be of great help.

Thanks
Vivek

How to obtain Subject Status and Edit Check?

Hi:

The result obtained by StudyVersionRequest is not shown Edit Check Data. How to get Edit Check Data?

And the subject data does not contain Subject Status. How to get it?

Best Regards

Double quotes escaped when fetching CSV metadata

Hello,

We are using your nice library to fetch the data and metadata from Rave. When we fetch the metadata in CSV format, the double quote seems to be escaped with a back-tick, leading to some error on our side since we are checking that the projectname is the same in the response than in the request.

We receive something like:
projectname,viewname,ordinal,varname,vartype,varlength,varformat,varlabel
"{projectName}","{ViewName}","{ordinal}","{varname}","{vartype}","{varlength}","{varformat}","{varlabel}"
...

Did you already do something in the Library to solve this issue ? Or do you know what is the best way to solve this issue?
I saw in the Rave documentation that someone had the same issue, so maybe if it is a common issue you have done something for this.

Already many thanks for the time you'll spent to answer my questions.

Have a nice day

PS: it appears only with the metadata, when fetching the clinical data, the double quote is not escaped with a back-tick

Found a bug

Hi,

The 'start' parameter was not present in the KNOWN_QUERY_OPTIONS in the ODMDatasetBase class. I created a fork and push a commit. I hope you will see it.

Thank you very much in advance,

Have a great day,

Oli

Production Clinical View

Is it somehow possible to pull 'Production Clinical Views' when using biostats_gateway FormDataRequest?

FormDataRequest(project_name, environment_name, dataset_type, form_oid)

environment_name is limited to 'regular' and 'raw', so from my understanding this pulls 'Clinical Views' and 'Clinical Views Raw'. I would like to pull 'Production Clinical Views'. Is this possible?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.