File size: 7,596 Bytes
9b1f57f
c341d18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9b1f57f
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<|im_start|>user
You are an expert Code Documentation writer. Your job is to document Python codebases. The Documentation should be in "Goolge Style Python Docstrings". User will give you a function definition and your job is to generate docstring for that function in the said format.
Now I will define a format which you will be following to generate the docstings. For each function definition, you will generate the following:
1. Description: This section should provide a clear and concise explanation of what the function does.
2. Arguments: In this section, describe the function's parameters (arguments) and their types. Include both mandatory and optional arguments. For each argument, provide a detailed explanation of its purpose and expected data type.
3. Returns: If the function returns a value, explain what that value represents and its data type. If the function doesn't return anything (i.e., it has a None return type), mention that explicitly.
4. Raises: Describe any exceptions or errors that the function may raise during its execution. Specify the conditions under which these exceptions might occur.
However, you must generate the final docstrings in a specific format which you should be able to figure out by looking at the following examples.

Code
def insert_to_database(cls, db_name:str, coll_name:str, data:dict)->Union[InsertOneResult, InsertManyResult]:
        con = DBConnection.get_client()
        mydb = con[db_name]
        mycol = mydb[coll_name]

        if isinstance(data, list):
            return mycol.insert_many(data)
        else:
            return mycol.insert_one(data)

"""insert a single record or iterable of records to the database.

Args:
    db_name (str): name of the database
    coll_name (str): name of the collection
    data (dict): data to be inserted

Returns:
    An instance of class: pymongo.results.InsertOneResult or 
    pymongo.results.InsertManyResult
"""

Code
def signup(response_result: FrontendResponseModel, data: Union[UserAuth,BulkSignup]):
    if isinstance(data, UserAuth):
        # querying database to check if user already exist
        user = DBQueries.filtered_db_search("Auth", data.role, [], AADHAR=data.AADHAR_NO)
        if len(list(user)) != 0:
            # user with the entered credentials already exists
            raise ExistingUserException(response_result)
    
        DBQueries.insert_to_database("Auth", data.role, userinfo)  # saving user to database
        response_result['status'] = f'success'
        response_result['message'] = [f'User with this AADHAR NO created successfully']

    else:
        AADHAR_NOS = data.AADHAR_NOS
        passwords = data.passwords
        village_name = data.village_name

        users = DBQueries.filtered_db_search("Auth", role_manager.user, ["_id","password","village_name"], search_idxs="AADHAR":"$in":AADHAR_NOS)
        users = [user["AADHAR"] for user in users]

        invalid_users = []
        valid_users = []
        users_created = []

        for user in zip(AADHAR_NOS,passwords):
            if user[0] in users:
                invalid_users.append(user[0])
            else:
                userinfo["AADHAR"] = user[0]
                userinfo["password"] = Auth.get_password_hash(user[1])
                valid_users.append(userinfo) 
                users_created.append(user[0])

        if len(valid_users)!=0:
            DBQueries.insert_to_database("Auth", role_manager.user, valid_users)  # saving user to database
            response_result['status'] = f'success'
            response_result['message'] = [f'Users created successfully']
        else:
            response_result['status'] = f'failure'
            response_result['message'] = [f'No users created']

"""Wrapper method to handle signup process.

    Args:
        response_result: FrontendResponseModel. A TypedDict to return the
                         response captured from the API to the frontend.
        data: UserAuth. New user's prospective credentials from the frontend
                        to create their account.

    Raises:
        ExistingUserException: If account with entered AADHAR Number already exists.
"""

Code
def fetch_individualdata(response_result: dict, db_name: str, AADHAR_No: str)->Cursor[_DocumentType]:
    exclude_fields = field_manager.get_form_fields(FormData, exclude=["fam_info"])
    exclude_fields += ["_id","timestamp","volunteer_id"]
    indivdata = [docs for docs in DBQueries.filtered_db_search(db_name,collection_names["fam_data"],exclude_fields,search_idxs="fam_info.AADHAR_No":AADHAR_No)]
    if len(indivdata) == 0:
        raise InfoNotFoundException(response_result, "person with this id does not exist in the database")
    
    fam_members = [doc for doc in indivdata[0]["fam_info"] if doc["AADHAR_No"] == AADHAR_No]

    return fam_members[0]

"""Wrapper function to fetch individual data from the database.
    Args:
        response_result (dict): response result to be returned in case of error.
        db_name (str): name of the database.
        AADHAR_No (str): id of the respondent.
        
    Returns:
        Cursor[_DocumentType]: A cursor containing the data of the individual 
        fetched from the database.
"""

Code
def user_login(tokens: TokenSchema, form_data: UserAuth):
    user = DBQueries.filtered_db_search("Auth", form_data.role, ['_id'], AADHAR=form_data.AADHAR_NO)
    data = list(user)
    if len(data) == 0:
        # no such users in the database
        raise LoginFailedException(tokens)

    if not Auth.verify_password(form_data.password, data[0]['password']) or \
            not Auth.verify_village_name(data[0]['village_name'], form_data.village_name):
        # incorrect credentials
        raise LoginFailedException(tokens)

    # successful login
    sub = form_data.AADHAR_NO + "_" + form_data.role + "_" + form_data.village_name
    tokens['access_token'] = Auth.create_access_token(sub)
    tokens['refresh_token'] = Auth.create_refresh_token(sub)
    tokens['status'] = 'login successful'
    tokens['role'] = form_data.role

"""Wrapper method to handle sign-ins and generating `access_tokens`.

    Args:
        tokens: TokenSchema. A TypedDict to return `access_token`,
                             `refresh_access_tokens`, `status`, and `role`
                             related information to grant genuine users their
                             respective level of authorization according to
                             the maintained hierarchy.
        form_data: UserAuth. Sign-in credentials entered by the users at the
                             time of signing in.

    Raises:
        LoginFailedException: If no user with entered credentials exists.
"""

Code
def token_validation(token: str) -> bool:
        try:
            payload = jwt.decode(
                token, settings.JWT_SECRET_KEY, algorithms=[settings.ALGORITHM]
            )
            token_data = TokenPayload(**payload)

            if datetime.fromtimestamp(token_data.exp) < datetime.now():
                return False

        except(jwt.JWTError, ValidationError):
            return False

        return True

"""Decodes JWTs to check their validity by inspecting expiry and
         authorization code.

        Args:
            token: str. Authenticated `access_token` of the user.

        Returns:
            bool value to indicate validity of the access tokens.

        Raises:
            jwt.JWTError: If decode fails.
            ValidationError: If JWTs are not in RFC 7519 standard.
"""

Code
{instruction} <|im_end|>
<|im_start|>assistant