diff --git a/.invenio/.gitignore b/.invenio/.gitignore index 9f935a384712f07f2c0e25eafa4a2dd703a3f07a..9e1853c3a0f82f337665c55557c10fe408581984 100644 --- a/.invenio/.gitignore +++ b/.invenio/.gitignore @@ -1,5 +1,4 @@ __pycache__ +venv/ -features.csv - -venv/ \ No newline at end of file +./swagger-codegen-cli.jar \ No newline at end of file diff --git a/.invenio/api_authentication/__init__.py b/.invenio/api_authentication/__init__.py index 35ee2cbe20fb39983f6acedf381d9ac91135aa4c..0c554301983315659b5f3731ddce654284eb3dd0 100644 --- a/.invenio/api_authentication/__init__.py +++ b/.invenio/api_authentication/__init__.py @@ -16,6 +16,7 @@ from __future__ import absolute_import # import apis into sdk package from api_authentication.api.authentication_endpoint_api import AuthenticationEndpointApi +from api_authentication.api.token_endpoint_api import TokenEndpointApi from api_authentication.api.user_endpoint_api import UserEndpointApi # import ApiClient from api_authentication.api_client import ApiClient @@ -31,7 +32,15 @@ from api_authentication.models.image_date_dto import ImageDateDto from api_authentication.models.image_dto import ImageDto from api_authentication.models.image_env_item_dto import ImageEnvItemDto from api_authentication.models.jwt_response_dto import JwtResponseDto +from api_authentication.models.license_dto import LicenseDto from api_authentication.models.login_request_dto import LoginRequestDto from api_authentication.models.signup_request_dto import SignupRequestDto from api_authentication.models.table_dto import TableDto from api_authentication.models.user_dto import UserDto +from api_authentication.models.user_email_dto import UserEmailDto +from api_authentication.models.user_forgot_dto import UserForgotDto +from api_authentication.models.user_password_dto import UserPasswordDto +from api_authentication.models.user_reset_dto import UserResetDto +from api_authentication.models.user_roles_dto import UserRolesDto +from api_authentication.models.user_token_modify_dto import UserTokenModifyDto +from api_authentication.models.user_update_dto import UserUpdateDto diff --git a/.invenio/api_authentication/api/__init__.py b/.invenio/api_authentication/api/__init__.py index cbc391c39ae5b94a4d733f413c49ebcd9bc2c858..9643d433a897d442036202f72e292b7b4cf0c6d5 100644 --- a/.invenio/api_authentication/api/__init__.py +++ b/.invenio/api_authentication/api/__init__.py @@ -4,4 +4,5 @@ from __future__ import absolute_import # import apis into api package from api_authentication.api.authentication_endpoint_api import AuthenticationEndpointApi +from api_authentication.api.token_endpoint_api import TokenEndpointApi from api_authentication.api.user_endpoint_api import UserEndpointApi diff --git a/.invenio/api_authentication/api/user_endpoint_api.py b/.invenio/api_authentication/api/user_endpoint_api.py index 57aec17e4bf1ce07d29e56cf732c22598e99f097..2e96e809c317a1149b03820c1b7ff9addbe35f32 100644 --- a/.invenio/api_authentication/api/user_endpoint_api.py +++ b/.invenio/api_authentication/api/user_endpoint_api.py @@ -32,6 +32,196 @@ class UserEndpointApi(object): api_client = ApiClient() self.api_client = api_client + def find(self, id, **kwargs): # noqa: E501 + """Find some user # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.find_with_http_info(id, **kwargs) # noqa: E501 + else: + (data) = self.find_with_http_info(id, **kwargs) # noqa: E501 + return data + + def find_with_http_info(self, id, **kwargs): # noqa: E501 + """Find some user # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.find_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method find" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `find`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['*/*']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/user/{id}', 'GET', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='UserDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def forgot(self, body, **kwargs): # noqa: E501 + """Forgot user information # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.forgot(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserForgotDto body: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.forgot_with_http_info(body, **kwargs) # noqa: E501 + else: + (data) = self.forgot_with_http_info(body, **kwargs) # noqa: E501 + return data + + def forgot_with_http_info(self, body, **kwargs): # noqa: E501 + """Forgot user information # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.forgot_with_http_info(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserForgotDto body: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method forgot" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `forgot`") # noqa: E501 + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['*/*']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/user', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='UserDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + def list(self, **kwargs): # noqa: E501 """List users # noqa: E501 @@ -213,3 +403,617 @@ class UserEndpointApi(object): _preload_content=params.get('_preload_content', True), _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) + + def reset(self, body, **kwargs): # noqa: E501 + """Reset user information # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.reset(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserResetDto body: (required) + :return: None + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.reset_with_http_info(body, **kwargs) # noqa: E501 + else: + (data) = self.reset_with_http_info(body, **kwargs) # noqa: E501 + return data + + def reset_with_http_info(self, body, **kwargs): # noqa: E501 + """Reset user information # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.reset_with_http_info(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserResetDto body: (required) + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method reset" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `reset`") # noqa: E501 + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['*/*']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/api/user/reset', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type=None, # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def update(self, body, id, **kwargs): # noqa: E501 + """Update user # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserUpdateDto body: (required) + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_with_http_info(body, id, **kwargs) # noqa: E501 + else: + (data) = self.update_with_http_info(body, id, **kwargs) # noqa: E501 + return data + + def update_with_http_info(self, body, id, **kwargs): # noqa: E501 + """Update user # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_with_http_info(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserUpdateDto body: (required) + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body', 'id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['*/*']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/user/{id}', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='UserDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def update_email(self, body, id, **kwargs): # noqa: E501 + """Update user email # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_email(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserEmailDto body: (required) + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_email_with_http_info(body, id, **kwargs) # noqa: E501 + else: + (data) = self.update_email_with_http_info(body, id, **kwargs) # noqa: E501 + return data + + def update_email_with_http_info(self, body, id, **kwargs): # noqa: E501 + """Update user email # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_email_with_http_info(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserEmailDto body: (required) + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body', 'id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update_email" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update_email`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update_email`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['*/*']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/user/{id}/email', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='UserDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def update_password(self, body, id, **kwargs): # noqa: E501 + """Update user password # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_password(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserPasswordDto body: (required) + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_password_with_http_info(body, id, **kwargs) # noqa: E501 + else: + (data) = self.update_password_with_http_info(body, id, **kwargs) # noqa: E501 + return data + + def update_password_with_http_info(self, body, id, **kwargs): # noqa: E501 + """Update user password # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_password_with_http_info(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserPasswordDto body: (required) + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body', 'id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update_password" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update_password`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update_password`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['*/*']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/user/{id}/password', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='UserDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def update_roles(self, body, id, **kwargs): # noqa: E501 + """Update user roles # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_roles(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserRolesDto body: (required) + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_roles_with_http_info(body, id, **kwargs) # noqa: E501 + else: + (data) = self.update_roles_with_http_info(body, id, **kwargs) # noqa: E501 + return data + + def update_roles_with_http_info(self, body, id, **kwargs): # noqa: E501 + """Update user roles # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_roles_with_http_info(body, id, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserRolesDto body: (required) + :param int id: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body', 'id'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update_roles" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update_roles`") # noqa: E501 + # verify the required parameter 'id' is set + if ('id' not in params or + params['id'] is None): + raise ValueError("Missing the required parameter `id` when calling `update_roles`") # noqa: E501 + + collection_formats = {} + + path_params = {} + if 'id' in params: + path_params['id'] = params['id'] # noqa: E501 + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['*/*']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/user/{id}/roles', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='UserDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + + def update_tokens(self, body, **kwargs): # noqa: E501 + """Update user token # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_tokens(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserTokenModifyDto body: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_tokens_with_http_info(body, **kwargs) # noqa: E501 + else: + (data) = self.update_tokens_with_http_info(body, **kwargs) # noqa: E501 + return data + + def update_tokens_with_http_info(self, body, **kwargs): # noqa: E501 + """Update user token # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_tokens_with_http_info(body, async_req=True) + >>> result = thread.get() + + :param async_req bool + :param UserTokenModifyDto body: (required) + :return: UserDto + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update_tokens" % key + ) + params[key] = val + del params['kwargs'] + # verify the required parameter 'body' is set + if ('body' not in params or + params['body'] is None): + raise ValueError("Missing the required parameter `body` when calling `update_tokens`") # noqa: E501 + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['*/*']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/json']) # noqa: E501 + + # Authentication setting + auth_settings = ['bearerAuth'] # noqa: E501 + + return self.api_client.call_api( + '/api/user/token', 'PUT', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='UserDto', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) diff --git a/.invenio/api_authentication/models/__init__.py b/.invenio/api_authentication/models/__init__.py index 12310cc1710fbbb9b4639a83455c59a2de7b8d61..7b8c71e13e0697355b5582164bf3d806d9265788 100644 --- a/.invenio/api_authentication/models/__init__.py +++ b/.invenio/api_authentication/models/__init__.py @@ -24,7 +24,15 @@ from api_authentication.models.image_date_dto import ImageDateDto from api_authentication.models.image_dto import ImageDto from api_authentication.models.image_env_item_dto import ImageEnvItemDto from api_authentication.models.jwt_response_dto import JwtResponseDto +from api_authentication.models.license_dto import LicenseDto from api_authentication.models.login_request_dto import LoginRequestDto from api_authentication.models.signup_request_dto import SignupRequestDto from api_authentication.models.table_dto import TableDto from api_authentication.models.user_dto import UserDto +from api_authentication.models.user_email_dto import UserEmailDto +from api_authentication.models.user_forgot_dto import UserForgotDto +from api_authentication.models.user_password_dto import UserPasswordDto +from api_authentication.models.user_reset_dto import UserResetDto +from api_authentication.models.user_roles_dto import UserRolesDto +from api_authentication.models.user_token_modify_dto import UserTokenModifyDto +from api_authentication.models.user_update_dto import UserUpdateDto diff --git a/.invenio/api_authentication/models/database_dto.py b/.invenio/api_authentication/models/database_dto.py index 70401b256c2312b57c732bb81a7ab151b435dc8a..f3407b41a9a36cef84fad18aeecfc0d9304de1e5 100644 --- a/.invenio/api_authentication/models/database_dto.py +++ b/.invenio/api_authentication/models/database_dto.py @@ -30,71 +30,97 @@ class DatabaseDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'exchange': 'str', + 'creator': 'UserDto', + 'subjects': 'list[str]', + 'language': 'str', + 'license': 'LicenseDto', 'description': 'str', 'publisher': 'str', - 'license': 'str', 'contact': 'UserDto', 'tables': 'list[TableDto]', - 'exchange': 'str', 'image': 'ImageDto', 'container': 'ContainerDto', 'created': 'datetime', 'deleted': 'datetime', - 'internal_name': 'str' + 'internal_name': 'str', + 'publication_year': 'int', + 'is_public': 'bool' } attribute_map = { 'id': 'id', 'name': 'name', + 'exchange': 'exchange', + 'creator': 'creator', + 'subjects': 'subjects', + 'language': 'language', + 'license': 'license', 'description': 'description', 'publisher': 'publisher', - 'license': 'license', 'contact': 'contact', 'tables': 'tables', - 'exchange': 'exchange', 'image': 'image', 'container': 'container', 'created': 'created', 'deleted': 'deleted', - 'internal_name': 'internal_name' + 'internal_name': 'internal_name', + 'publication_year': 'publication_year', + 'is_public': 'is_public' } - def __init__(self, id=None, name=None, description=None, publisher=None, license=None, contact=None, tables=None, exchange=None, image=None, container=None, created=None, deleted=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, exchange=None, creator=None, subjects=None, language=None, license=None, description=None, publisher=None, contact=None, tables=None, image=None, container=None, created=None, deleted=None, internal_name=None, publication_year=None, is_public=None): # noqa: E501 """DatabaseDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._exchange = None + self._creator = None + self._subjects = None + self._language = None + self._license = None self._description = None self._publisher = None - self._license = None self._contact = None self._tables = None - self._exchange = None self._image = None self._container = None self._created = None self._deleted = None self._internal_name = None + self._publication_year = None + self._is_public = None self.discriminator = None self.id = id self.name = name - self.description = description - if publisher is not None: - self.publisher = publisher + self.exchange = exchange + self.creator = creator + if subjects is not None: + self.subjects = subjects + if language is not None: + self.language = language if license is not None: self.license = license + if description is not None: + self.description = description + if publisher is not None: + self.publisher = publisher if contact is not None: self.contact = contact if tables is not None: self.tables = tables - self.exchange = exchange if image is not None: self.image = image if container is not None: self.container = container - self.created = created + if created is not None: + self.created = created if deleted is not None: self.deleted = deleted self.internal_name = internal_name + if publication_year is not None: + self.publication_year = publication_year + if is_public is not None: + self.is_public = is_public @property def id(self): @@ -143,48 +169,98 @@ class DatabaseDto(object): self._name = name @property - def description(self): - """Gets the description of this DatabaseDto. # noqa: E501 + def exchange(self): + """Gets the exchange of this DatabaseDto. # noqa: E501 - :return: The description of this DatabaseDto. # noqa: E501 + :return: The exchange of this DatabaseDto. # noqa: E501 :rtype: str """ - return self._description + return self._exchange - @description.setter - def description(self, description): - """Sets the description of this DatabaseDto. + @exchange.setter + def exchange(self, exchange): + """Sets the exchange of this DatabaseDto. - :param description: The description of this DatabaseDto. # noqa: E501 + :param exchange: The exchange of this DatabaseDto. # noqa: E501 :type: str """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 + if exchange is None: + raise ValueError("Invalid value for `exchange`, must not be `None`") # noqa: E501 - self._description = description + self._exchange = exchange @property - def publisher(self): - """Gets the publisher of this DatabaseDto. # noqa: E501 + def creator(self): + """Gets the creator of this DatabaseDto. # noqa: E501 - :return: The publisher of this DatabaseDto. # noqa: E501 + :return: The creator of this DatabaseDto. # noqa: E501 + :rtype: UserDto + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this DatabaseDto. + + + :param creator: The creator of this DatabaseDto. # noqa: E501 + :type: UserDto + """ + if creator is None: + raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + + self._creator = creator + + @property + def subjects(self): + """Gets the subjects of this DatabaseDto. # noqa: E501 + + + :return: The subjects of this DatabaseDto. # noqa: E501 + :rtype: list[str] + """ + return self._subjects + + @subjects.setter + def subjects(self, subjects): + """Sets the subjects of this DatabaseDto. + + + :param subjects: The subjects of this DatabaseDto. # noqa: E501 + :type: list[str] + """ + + self._subjects = subjects + + @property + def language(self): + """Gets the language of this DatabaseDto. # noqa: E501 + + + :return: The language of this DatabaseDto. # noqa: E501 :rtype: str """ - return self._publisher + return self._language - @publisher.setter - def publisher(self, publisher): - """Sets the publisher of this DatabaseDto. + @language.setter + def language(self, language): + """Sets the language of this DatabaseDto. - :param publisher: The publisher of this DatabaseDto. # noqa: E501 + :param language: The language of this DatabaseDto. # noqa: E501 :type: str """ + allowed_values = ["ab", "aa", "af", "ak", "sq", "am", "ar", "an", "hy", "as", "av", "ae", "ay", "az", "bm", "ba", "eu", "be", "bn", "bh", "bi", "bs", "br", "bg", "my", "ca", "km", "ch", "ce", "ny", "zh", "cu", "cv", "kw", "co", "cr", "hr", "cs", "da", "dv", "nl", "dz", "en", "eo", "et", "ee", "fo", "fj", "fi", "fr", "ff", "gd", "gl", "lg", "ka", "de", "ki", "el", "kl", "gn", "gu", "ht", "ha", "he", "hz", "hi", "ho", "hu", "is", "io", "ig", "id", "ia", "ie", "iu", "ik", "ga", "it", "ja", "jv", "kn", "kr", "ks", "kk", "rw", "kv", "kg", "ko", "kj", "ku", "ky", "lo", "la", "lv", "lb", "li", "ln", "lt", "lu", "mk", "mg", "ms", "ml", "mt", "gv", "mi", "mr", "mh", "ro", "mn", "na", "nv", "nd", "ng", "ne", "se", "no", "nb", "nn", "ii", "oc", "oj", "or", "om", "os", "pi", "pa", "ps", "fa", "pl", "pt", "qu", "rm", "rn", "ru", "sm", "sg", "sa", "sc", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "nr", "es", "su", "sw", "ss", "sv", "tl", "ty", "tg", "ta", "tt", "te", "th", "bo", "ti", "to", "ts", "tn", "tr", "tk", "tw", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "cy", "fy", "wo", "xh", "yi", "yo", "za", "zu"] # noqa: E501 + if language not in allowed_values: + raise ValueError( + "Invalid value for `language` ({0}), must be one of {1}" # noqa: E501 + .format(language, allowed_values) + ) - self._publisher = publisher + self._language = language @property def license(self): @@ -192,7 +268,7 @@ class DatabaseDto(object): :return: The license of this DatabaseDto. # noqa: E501 - :rtype: str + :rtype: LicenseDto """ return self._license @@ -202,11 +278,53 @@ class DatabaseDto(object): :param license: The license of this DatabaseDto. # noqa: E501 - :type: str + :type: LicenseDto """ self._license = license + @property + def description(self): + """Gets the description of this DatabaseDto. # noqa: E501 + + + :return: The description of this DatabaseDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this DatabaseDto. + + + :param description: The description of this DatabaseDto. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def publisher(self): + """Gets the publisher of this DatabaseDto. # noqa: E501 + + + :return: The publisher of this DatabaseDto. # noqa: E501 + :rtype: str + """ + return self._publisher + + @publisher.setter + def publisher(self, publisher): + """Sets the publisher of this DatabaseDto. + + + :param publisher: The publisher of this DatabaseDto. # noqa: E501 + :type: str + """ + + self._publisher = publisher + @property def contact(self): """Gets the contact of this DatabaseDto. # noqa: E501 @@ -249,29 +367,6 @@ class DatabaseDto(object): self._tables = tables - @property - def exchange(self): - """Gets the exchange of this DatabaseDto. # noqa: E501 - - - :return: The exchange of this DatabaseDto. # noqa: E501 - :rtype: str - """ - return self._exchange - - @exchange.setter - def exchange(self, exchange): - """Sets the exchange of this DatabaseDto. - - - :param exchange: The exchange of this DatabaseDto. # noqa: E501 - :type: str - """ - if exchange is None: - raise ValueError("Invalid value for `exchange`, must not be `None`") # noqa: E501 - - self._exchange = exchange - @property def image(self): """Gets the image of this DatabaseDto. # noqa: E501 @@ -332,8 +427,6 @@ class DatabaseDto(object): :param created: The created of this DatabaseDto. # noqa: E501 :type: datetime """ - if created is None: - raise ValueError("Invalid value for `created`, must not be `None`") # noqa: E501 self._created = created @@ -381,6 +474,48 @@ class DatabaseDto(object): self._internal_name = internal_name + @property + def publication_year(self): + """Gets the publication_year of this DatabaseDto. # noqa: E501 + + + :return: The publication_year of this DatabaseDto. # noqa: E501 + :rtype: int + """ + return self._publication_year + + @publication_year.setter + def publication_year(self, publication_year): + """Sets the publication_year of this DatabaseDto. + + + :param publication_year: The publication_year of this DatabaseDto. # noqa: E501 + :type: int + """ + + self._publication_year = publication_year + + @property + def is_public(self): + """Gets the is_public of this DatabaseDto. # noqa: E501 + + + :return: The is_public of this DatabaseDto. # noqa: E501 + :rtype: bool + """ + return self._is_public + + @is_public.setter + def is_public(self, is_public): + """Sets the is_public of this DatabaseDto. + + + :param is_public: The is_public of this DatabaseDto. # noqa: E501 + :type: bool + """ + + self._is_public = is_public + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_authentication/models/table_dto.py b/.invenio/api_authentication/models/table_dto.py index d947562cac77858a851fd40997e7dd213bf61380..9eceddcfc49f5bcd0031bde0c00cf5e2434fa072 100644 --- a/.invenio/api_authentication/models/table_dto.py +++ b/.invenio/api_authentication/models/table_dto.py @@ -32,15 +32,9 @@ class TableDto(object): 'name': 'str', 'topic': 'str', 'description': 'str', - 'separator': 'str', - 'quote': 'str', 'created': 'datetime', 'columns': 'list[ColumnDto]', - 'internal_name': 'str', - 'null_element': 'str', - 'skip_lines': 'int', - 'true_element': 'str', - 'false_element': 'str' + 'internal_name': 'str' } attribute_map = { @@ -48,50 +42,29 @@ class TableDto(object): 'name': 'name', 'topic': 'topic', 'description': 'description', - 'separator': 'separator', - 'quote': 'quote', 'created': 'created', 'columns': 'columns', - 'internal_name': 'internal_name', - 'null_element': 'null_element', - 'skip_lines': 'skip_lines', - 'true_element': 'true_element', - 'false_element': 'false_element' + 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, topic=None, description=None, separator=None, quote=None, created=None, columns=None, internal_name=None, null_element=None, skip_lines=None, true_element=None, false_element=None): # noqa: E501 + def __init__(self, id=None, name=None, topic=None, description=None, created=None, columns=None, internal_name=None): # noqa: E501 """TableDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._topic = None self._description = None - self._separator = None - self._quote = None self._created = None self._columns = None self._internal_name = None - self._null_element = None - self._skip_lines = None - self._true_element = None - self._false_element = None self.discriminator = None self.id = id self.name = name self.topic = topic self.description = description - self.separator = separator - self.quote = quote if created is not None: self.created = created self.columns = columns self.internal_name = internal_name - self.null_element = null_element - if skip_lines is not None: - self.skip_lines = skip_lines - if true_element is not None: - self.true_element = true_element - if false_element is not None: - self.false_element = false_element @property def id(self): @@ -185,52 +158,6 @@ class TableDto(object): self._description = description - @property - def separator(self): - """Gets the separator of this TableDto. # noqa: E501 - - - :return: The separator of this TableDto. # noqa: E501 - :rtype: str - """ - return self._separator - - @separator.setter - def separator(self, separator): - """Sets the separator of this TableDto. - - - :param separator: The separator of this TableDto. # noqa: E501 - :type: str - """ - if separator is None: - raise ValueError("Invalid value for `separator`, must not be `None`") # noqa: E501 - - self._separator = separator - - @property - def quote(self): - """Gets the quote of this TableDto. # noqa: E501 - - - :return: The quote of this TableDto. # noqa: E501 - :rtype: str - """ - return self._quote - - @quote.setter - def quote(self, quote): - """Sets the quote of this TableDto. - - - :param quote: The quote of this TableDto. # noqa: E501 - :type: str - """ - if quote is None: - raise ValueError("Invalid value for `quote`, must not be `None`") # noqa: E501 - - self._quote = quote - @property def created(self): """Gets the created of this TableDto. # noqa: E501 @@ -298,92 +225,6 @@ class TableDto(object): self._internal_name = internal_name - @property - def null_element(self): - """Gets the null_element of this TableDto. # noqa: E501 - - - :return: The null_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._null_element - - @null_element.setter - def null_element(self, null_element): - """Sets the null_element of this TableDto. - - - :param null_element: The null_element of this TableDto. # noqa: E501 - :type: str - """ - if null_element is None: - raise ValueError("Invalid value for `null_element`, must not be `None`") # noqa: E501 - - self._null_element = null_element - - @property - def skip_lines(self): - """Gets the skip_lines of this TableDto. # noqa: E501 - - - :return: The skip_lines of this TableDto. # noqa: E501 - :rtype: int - """ - return self._skip_lines - - @skip_lines.setter - def skip_lines(self, skip_lines): - """Sets the skip_lines of this TableDto. - - - :param skip_lines: The skip_lines of this TableDto. # noqa: E501 - :type: int - """ - - self._skip_lines = skip_lines - - @property - def true_element(self): - """Gets the true_element of this TableDto. # noqa: E501 - - - :return: The true_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._true_element - - @true_element.setter - def true_element(self, true_element): - """Sets the true_element of this TableDto. - - - :param true_element: The true_element of this TableDto. # noqa: E501 - :type: str - """ - - self._true_element = true_element - - @property - def false_element(self): - """Gets the false_element of this TableDto. # noqa: E501 - - - :return: The false_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._false_element - - @false_element.setter - def false_element(self, false_element): - """Sets the false_element of this TableDto. - - - :param false_element: The false_element of this TableDto. # noqa: E501 - :type: str - """ - - self._false_element = false_element - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_authentication/models/user_dto.py b/.invenio/api_authentication/models/user_dto.py index 7c0ecd35b483946829c4f46b6f515cb369af357f..e7c29449dfee8216c6e9a96942d2027492627b42 100644 --- a/.invenio/api_authentication/models/user_dto.py +++ b/.invenio/api_authentication/models/user_dto.py @@ -31,52 +31,51 @@ class UserDto(object): 'id': 'int', 'authorities': 'list[GrantedAuthorityDto]', 'username': 'str', - 'titles_before': 'str', - 'titles_after': 'str', 'firstname': 'str', 'lastname': 'str', 'containers': 'list[ContainerDto]', 'databases': 'list[ContainerDto]', 'identifiers': 'list[ContainerDto]', - 'email': 'str' + 'email': 'str', + 'titles_before': 'str', + 'titles_after': 'str', + 'email_verified': 'bool' } attribute_map = { 'id': 'id', 'authorities': 'authorities', 'username': 'username', - 'titles_before': 'titlesBefore', - 'titles_after': 'titlesAfter', 'firstname': 'firstname', 'lastname': 'lastname', 'containers': 'containers', 'databases': 'databases', 'identifiers': 'identifiers', - 'email': 'email' + 'email': 'email', + 'titles_before': 'titles_before', + 'titles_after': 'titles_after', + 'email_verified': 'email_verified' } - def __init__(self, id=None, authorities=None, username=None, titles_before=None, titles_after=None, firstname=None, lastname=None, containers=None, databases=None, identifiers=None, email=None): # noqa: E501 + def __init__(self, id=None, authorities=None, username=None, firstname=None, lastname=None, containers=None, databases=None, identifiers=None, email=None, titles_before=None, titles_after=None, email_verified=None): # noqa: E501 """UserDto - a model defined in Swagger""" # noqa: E501 self._id = None self._authorities = None self._username = None - self._titles_before = None - self._titles_after = None self._firstname = None self._lastname = None self._containers = None self._databases = None self._identifiers = None self._email = None + self._titles_before = None + self._titles_after = None + self._email_verified = None self.discriminator = None self.id = id if authorities is not None: self.authorities = authorities self.username = username - if titles_before is not None: - self.titles_before = titles_before - if titles_after is not None: - self.titles_after = titles_after if firstname is not None: self.firstname = firstname if lastname is not None: @@ -88,6 +87,12 @@ class UserDto(object): if identifiers is not None: self.identifiers = identifiers self.email = email + if titles_before is not None: + self.titles_before = titles_before + if titles_after is not None: + self.titles_after = titles_after + if email_verified is not None: + self.email_verified = email_verified @property def id(self): @@ -156,48 +161,6 @@ class UserDto(object): self._username = username - @property - def titles_before(self): - """Gets the titles_before of this UserDto. # noqa: E501 - - - :return: The titles_before of this UserDto. # noqa: E501 - :rtype: str - """ - return self._titles_before - - @titles_before.setter - def titles_before(self, titles_before): - """Sets the titles_before of this UserDto. - - - :param titles_before: The titles_before of this UserDto. # noqa: E501 - :type: str - """ - - self._titles_before = titles_before - - @property - def titles_after(self): - """Gets the titles_after of this UserDto. # noqa: E501 - - - :return: The titles_after of this UserDto. # noqa: E501 - :rtype: str - """ - return self._titles_after - - @titles_after.setter - def titles_after(self, titles_after): - """Sets the titles_after of this UserDto. - - - :param titles_after: The titles_after of this UserDto. # noqa: E501 - :type: str - """ - - self._titles_after = titles_after - @property def firstname(self): """Gets the firstname of this UserDto. # noqa: E501 @@ -326,6 +289,69 @@ class UserDto(object): self._email = email + @property + def titles_before(self): + """Gets the titles_before of this UserDto. # noqa: E501 + + + :return: The titles_before of this UserDto. # noqa: E501 + :rtype: str + """ + return self._titles_before + + @titles_before.setter + def titles_before(self, titles_before): + """Sets the titles_before of this UserDto. + + + :param titles_before: The titles_before of this UserDto. # noqa: E501 + :type: str + """ + + self._titles_before = titles_before + + @property + def titles_after(self): + """Gets the titles_after of this UserDto. # noqa: E501 + + + :return: The titles_after of this UserDto. # noqa: E501 + :rtype: str + """ + return self._titles_after + + @titles_after.setter + def titles_after(self, titles_after): + """Sets the titles_after of this UserDto. + + + :param titles_after: The titles_after of this UserDto. # noqa: E501 + :type: str + """ + + self._titles_after = titles_after + + @property + def email_verified(self): + """Gets the email_verified of this UserDto. # noqa: E501 + + + :return: The email_verified of this UserDto. # noqa: E501 + :rtype: bool + """ + return self._email_verified + + @email_verified.setter + def email_verified(self, email_verified): + """Sets the email_verified of this UserDto. + + + :param email_verified: The email_verified of this UserDto. # noqa: E501 + :type: bool + """ + + self._email_verified = email_verified + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_container/__init__.py b/.invenio/api_container/__init__.py index 061cc4da9396751bd77c302b2ee24faa0df18deb..de472c538ba49ce2197523cf8d2305661fb5d4f4 100644 --- a/.invenio/api_container/__init__.py +++ b/.invenio/api_container/__init__.py @@ -36,5 +36,6 @@ from api_container.models.image_create_dto import ImageCreateDto from api_container.models.image_date_dto import ImageDateDto from api_container.models.image_dto import ImageDto from api_container.models.image_env_item_dto import ImageEnvItemDto +from api_container.models.license_dto import LicenseDto from api_container.models.table_dto import TableDto from api_container.models.user_dto import UserDto diff --git a/.invenio/api_container/models/__init__.py b/.invenio/api_container/models/__init__.py index d5942fd5743d419778e9c398367c4413f3c72215..427267c595c3729ead76cfed7767435d879c58d8 100644 --- a/.invenio/api_container/models/__init__.py +++ b/.invenio/api_container/models/__init__.py @@ -29,5 +29,6 @@ from api_container.models.image_create_dto import ImageCreateDto from api_container.models.image_date_dto import ImageDateDto from api_container.models.image_dto import ImageDto from api_container.models.image_env_item_dto import ImageEnvItemDto +from api_container.models.license_dto import LicenseDto from api_container.models.table_dto import TableDto from api_container.models.user_dto import UserDto diff --git a/.invenio/api_container/models/container_brief_dto.py b/.invenio/api_container/models/container_brief_dto.py index 6e58e2f7fc5c0a264d1b5e05df1db40d2932143a..09be8434558fb80640e190d4d967c1e7c7129a37 100644 --- a/.invenio/api_container/models/container_brief_dto.py +++ b/.invenio/api_container/models/container_brief_dto.py @@ -31,6 +31,8 @@ class ContainerBriefDto(object): 'id': 'int', 'hash': 'str', 'name': 'str', + 'creator': 'UserDto', + 'created': 'datetime', 'internal_name': 'str', 'is_public': 'bool' } @@ -39,21 +41,29 @@ class ContainerBriefDto(object): 'id': 'id', 'hash': 'hash', 'name': 'name', + 'creator': 'creator', + 'created': 'created', 'internal_name': 'internal_name', 'is_public': 'is_public' } - def __init__(self, id=None, hash=None, name=None, internal_name=None, is_public=None): # noqa: E501 + def __init__(self, id=None, hash=None, name=None, creator=None, created=None, internal_name=None, is_public=None): # noqa: E501 """ContainerBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._hash = None self._name = None + self._creator = None + self._created = None self._internal_name = None self._is_public = None self.discriminator = None self.id = id self.hash = hash self.name = name + if creator is not None: + self.creator = creator + if created is not None: + self.created = created self.internal_name = internal_name if is_public is not None: self.is_public = is_public @@ -127,6 +137,48 @@ class ContainerBriefDto(object): self._name = name + @property + def creator(self): + """Gets the creator of this ContainerBriefDto. # noqa: E501 + + + :return: The creator of this ContainerBriefDto. # noqa: E501 + :rtype: UserDto + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this ContainerBriefDto. + + + :param creator: The creator of this ContainerBriefDto. # noqa: E501 + :type: UserDto + """ + + self._creator = creator + + @property + def created(self): + """Gets the created of this ContainerBriefDto. # noqa: E501 + + + :return: The created of this ContainerBriefDto. # noqa: E501 + :rtype: datetime + """ + return self._created + + @created.setter + def created(self, created): + """Sets the created of this ContainerBriefDto. + + + :param created: The created of this ContainerBriefDto. # noqa: E501 + :type: datetime + """ + + self._created = created + @property def internal_name(self): """Gets the internal_name of this ContainerBriefDto. # noqa: E501 diff --git a/.invenio/api_container/models/container_change_dto.py b/.invenio/api_container/models/container_change_dto.py index b79f1c5436e7575e0e4badfdece045610f6a116e..53972bef23d532a251b205821058e9a1dc73cb15 100644 --- a/.invenio/api_container/models/container_change_dto.py +++ b/.invenio/api_container/models/container_change_dto.py @@ -61,7 +61,7 @@ class ContainerChangeDto(object): """ if action is None: raise ValueError("Invalid value for `action`, must not be `None`") # noqa: E501 - allowed_values = ["ContainerActionTypeDto.START", "ContainerActionTypeDto.STOP"] # noqa: E501 + allowed_values = ["start", "stop"] # noqa: E501 if action not in allowed_values: raise ValueError( "Invalid value for `action` ({0}), must be one of {1}" # noqa: E501 diff --git a/.invenio/api_container/models/database_dto.py b/.invenio/api_container/models/database_dto.py index f68ddd92ba53c7c94b31a522cf63aa3518a1d7be..456023d5d913bf5ab3bcab959a151f610e56e3d8 100644 --- a/.invenio/api_container/models/database_dto.py +++ b/.invenio/api_container/models/database_dto.py @@ -30,71 +30,97 @@ class DatabaseDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'exchange': 'str', + 'creator': 'UserDto', + 'subjects': 'list[str]', + 'language': 'str', + 'license': 'LicenseDto', 'description': 'str', 'publisher': 'str', - 'license': 'str', 'contact': 'UserDto', 'tables': 'list[TableDto]', - 'exchange': 'str', 'image': 'ImageDto', 'container': 'ContainerDto', 'created': 'datetime', 'deleted': 'datetime', - 'internal_name': 'str' + 'internal_name': 'str', + 'publication_year': 'int', + 'is_public': 'bool' } attribute_map = { 'id': 'id', 'name': 'name', + 'exchange': 'exchange', + 'creator': 'creator', + 'subjects': 'subjects', + 'language': 'language', + 'license': 'license', 'description': 'description', 'publisher': 'publisher', - 'license': 'license', 'contact': 'contact', 'tables': 'tables', - 'exchange': 'exchange', 'image': 'image', 'container': 'container', 'created': 'created', 'deleted': 'deleted', - 'internal_name': 'internal_name' + 'internal_name': 'internal_name', + 'publication_year': 'publication_year', + 'is_public': 'is_public' } - def __init__(self, id=None, name=None, description=None, publisher=None, license=None, contact=None, tables=None, exchange=None, image=None, container=None, created=None, deleted=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, exchange=None, creator=None, subjects=None, language=None, license=None, description=None, publisher=None, contact=None, tables=None, image=None, container=None, created=None, deleted=None, internal_name=None, publication_year=None, is_public=None): # noqa: E501 """DatabaseDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._exchange = None + self._creator = None + self._subjects = None + self._language = None + self._license = None self._description = None self._publisher = None - self._license = None self._contact = None self._tables = None - self._exchange = None self._image = None self._container = None self._created = None self._deleted = None self._internal_name = None + self._publication_year = None + self._is_public = None self.discriminator = None self.id = id self.name = name - self.description = description - if publisher is not None: - self.publisher = publisher + self.exchange = exchange + self.creator = creator + if subjects is not None: + self.subjects = subjects + if language is not None: + self.language = language if license is not None: self.license = license + if description is not None: + self.description = description + if publisher is not None: + self.publisher = publisher if contact is not None: self.contact = contact if tables is not None: self.tables = tables - self.exchange = exchange if image is not None: self.image = image if container is not None: self.container = container - self.created = created + if created is not None: + self.created = created if deleted is not None: self.deleted = deleted self.internal_name = internal_name + if publication_year is not None: + self.publication_year = publication_year + if is_public is not None: + self.is_public = is_public @property def id(self): @@ -143,48 +169,98 @@ class DatabaseDto(object): self._name = name @property - def description(self): - """Gets the description of this DatabaseDto. # noqa: E501 + def exchange(self): + """Gets the exchange of this DatabaseDto. # noqa: E501 - :return: The description of this DatabaseDto. # noqa: E501 + :return: The exchange of this DatabaseDto. # noqa: E501 :rtype: str """ - return self._description + return self._exchange - @description.setter - def description(self, description): - """Sets the description of this DatabaseDto. + @exchange.setter + def exchange(self, exchange): + """Sets the exchange of this DatabaseDto. - :param description: The description of this DatabaseDto. # noqa: E501 + :param exchange: The exchange of this DatabaseDto. # noqa: E501 :type: str """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 + if exchange is None: + raise ValueError("Invalid value for `exchange`, must not be `None`") # noqa: E501 - self._description = description + self._exchange = exchange @property - def publisher(self): - """Gets the publisher of this DatabaseDto. # noqa: E501 + def creator(self): + """Gets the creator of this DatabaseDto. # noqa: E501 - :return: The publisher of this DatabaseDto. # noqa: E501 + :return: The creator of this DatabaseDto. # noqa: E501 + :rtype: UserDto + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this DatabaseDto. + + + :param creator: The creator of this DatabaseDto. # noqa: E501 + :type: UserDto + """ + if creator is None: + raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + + self._creator = creator + + @property + def subjects(self): + """Gets the subjects of this DatabaseDto. # noqa: E501 + + + :return: The subjects of this DatabaseDto. # noqa: E501 + :rtype: list[str] + """ + return self._subjects + + @subjects.setter + def subjects(self, subjects): + """Sets the subjects of this DatabaseDto. + + + :param subjects: The subjects of this DatabaseDto. # noqa: E501 + :type: list[str] + """ + + self._subjects = subjects + + @property + def language(self): + """Gets the language of this DatabaseDto. # noqa: E501 + + + :return: The language of this DatabaseDto. # noqa: E501 :rtype: str """ - return self._publisher + return self._language - @publisher.setter - def publisher(self, publisher): - """Sets the publisher of this DatabaseDto. + @language.setter + def language(self, language): + """Sets the language of this DatabaseDto. - :param publisher: The publisher of this DatabaseDto. # noqa: E501 + :param language: The language of this DatabaseDto. # noqa: E501 :type: str """ + allowed_values = ["ab", "aa", "af", "ak", "sq", "am", "ar", "an", "hy", "as", "av", "ae", "ay", "az", "bm", "ba", "eu", "be", "bn", "bh", "bi", "bs", "br", "bg", "my", "ca", "km", "ch", "ce", "ny", "zh", "cu", "cv", "kw", "co", "cr", "hr", "cs", "da", "dv", "nl", "dz", "en", "eo", "et", "ee", "fo", "fj", "fi", "fr", "ff", "gd", "gl", "lg", "ka", "de", "ki", "el", "kl", "gn", "gu", "ht", "ha", "he", "hz", "hi", "ho", "hu", "is", "io", "ig", "id", "ia", "ie", "iu", "ik", "ga", "it", "ja", "jv", "kn", "kr", "ks", "kk", "rw", "kv", "kg", "ko", "kj", "ku", "ky", "lo", "la", "lv", "lb", "li", "ln", "lt", "lu", "mk", "mg", "ms", "ml", "mt", "gv", "mi", "mr", "mh", "ro", "mn", "na", "nv", "nd", "ng", "ne", "se", "no", "nb", "nn", "ii", "oc", "oj", "or", "om", "os", "pi", "pa", "ps", "fa", "pl", "pt", "qu", "rm", "rn", "ru", "sm", "sg", "sa", "sc", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "nr", "es", "su", "sw", "ss", "sv", "tl", "ty", "tg", "ta", "tt", "te", "th", "bo", "ti", "to", "ts", "tn", "tr", "tk", "tw", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "cy", "fy", "wo", "xh", "yi", "yo", "za", "zu"] # noqa: E501 + if language not in allowed_values: + raise ValueError( + "Invalid value for `language` ({0}), must be one of {1}" # noqa: E501 + .format(language, allowed_values) + ) - self._publisher = publisher + self._language = language @property def license(self): @@ -192,7 +268,7 @@ class DatabaseDto(object): :return: The license of this DatabaseDto. # noqa: E501 - :rtype: str + :rtype: LicenseDto """ return self._license @@ -202,11 +278,53 @@ class DatabaseDto(object): :param license: The license of this DatabaseDto. # noqa: E501 - :type: str + :type: LicenseDto """ self._license = license + @property + def description(self): + """Gets the description of this DatabaseDto. # noqa: E501 + + + :return: The description of this DatabaseDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this DatabaseDto. + + + :param description: The description of this DatabaseDto. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def publisher(self): + """Gets the publisher of this DatabaseDto. # noqa: E501 + + + :return: The publisher of this DatabaseDto. # noqa: E501 + :rtype: str + """ + return self._publisher + + @publisher.setter + def publisher(self, publisher): + """Sets the publisher of this DatabaseDto. + + + :param publisher: The publisher of this DatabaseDto. # noqa: E501 + :type: str + """ + + self._publisher = publisher + @property def contact(self): """Gets the contact of this DatabaseDto. # noqa: E501 @@ -249,29 +367,6 @@ class DatabaseDto(object): self._tables = tables - @property - def exchange(self): - """Gets the exchange of this DatabaseDto. # noqa: E501 - - - :return: The exchange of this DatabaseDto. # noqa: E501 - :rtype: str - """ - return self._exchange - - @exchange.setter - def exchange(self, exchange): - """Sets the exchange of this DatabaseDto. - - - :param exchange: The exchange of this DatabaseDto. # noqa: E501 - :type: str - """ - if exchange is None: - raise ValueError("Invalid value for `exchange`, must not be `None`") # noqa: E501 - - self._exchange = exchange - @property def image(self): """Gets the image of this DatabaseDto. # noqa: E501 @@ -332,8 +427,6 @@ class DatabaseDto(object): :param created: The created of this DatabaseDto. # noqa: E501 :type: datetime """ - if created is None: - raise ValueError("Invalid value for `created`, must not be `None`") # noqa: E501 self._created = created @@ -381,6 +474,48 @@ class DatabaseDto(object): self._internal_name = internal_name + @property + def publication_year(self): + """Gets the publication_year of this DatabaseDto. # noqa: E501 + + + :return: The publication_year of this DatabaseDto. # noqa: E501 + :rtype: int + """ + return self._publication_year + + @publication_year.setter + def publication_year(self, publication_year): + """Sets the publication_year of this DatabaseDto. + + + :param publication_year: The publication_year of this DatabaseDto. # noqa: E501 + :type: int + """ + + self._publication_year = publication_year + + @property + def is_public(self): + """Gets the is_public of this DatabaseDto. # noqa: E501 + + + :return: The is_public of this DatabaseDto. # noqa: E501 + :rtype: bool + """ + return self._is_public + + @is_public.setter + def is_public(self, is_public): + """Sets the is_public of this DatabaseDto. + + + :param is_public: The is_public of this DatabaseDto. # noqa: E501 + :type: bool + """ + + self._is_public = is_public + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_container/models/table_dto.py b/.invenio/api_container/models/table_dto.py index 328d7318d43e753c72457139483ba339a939a9e3..30b4e2932fc5deee389da6e604dc41bffbb656aa 100644 --- a/.invenio/api_container/models/table_dto.py +++ b/.invenio/api_container/models/table_dto.py @@ -32,15 +32,9 @@ class TableDto(object): 'name': 'str', 'topic': 'str', 'description': 'str', - 'separator': 'str', - 'quote': 'str', 'created': 'datetime', 'columns': 'list[ColumnDto]', - 'internal_name': 'str', - 'null_element': 'str', - 'skip_lines': 'int', - 'true_element': 'str', - 'false_element': 'str' + 'internal_name': 'str' } attribute_map = { @@ -48,50 +42,29 @@ class TableDto(object): 'name': 'name', 'topic': 'topic', 'description': 'description', - 'separator': 'separator', - 'quote': 'quote', 'created': 'created', 'columns': 'columns', - 'internal_name': 'internal_name', - 'null_element': 'null_element', - 'skip_lines': 'skip_lines', - 'true_element': 'true_element', - 'false_element': 'false_element' + 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, topic=None, description=None, separator=None, quote=None, created=None, columns=None, internal_name=None, null_element=None, skip_lines=None, true_element=None, false_element=None): # noqa: E501 + def __init__(self, id=None, name=None, topic=None, description=None, created=None, columns=None, internal_name=None): # noqa: E501 """TableDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._topic = None self._description = None - self._separator = None - self._quote = None self._created = None self._columns = None self._internal_name = None - self._null_element = None - self._skip_lines = None - self._true_element = None - self._false_element = None self.discriminator = None self.id = id self.name = name self.topic = topic self.description = description - self.separator = separator - self.quote = quote if created is not None: self.created = created self.columns = columns self.internal_name = internal_name - self.null_element = null_element - if skip_lines is not None: - self.skip_lines = skip_lines - if true_element is not None: - self.true_element = true_element - if false_element is not None: - self.false_element = false_element @property def id(self): @@ -185,52 +158,6 @@ class TableDto(object): self._description = description - @property - def separator(self): - """Gets the separator of this TableDto. # noqa: E501 - - - :return: The separator of this TableDto. # noqa: E501 - :rtype: str - """ - return self._separator - - @separator.setter - def separator(self, separator): - """Sets the separator of this TableDto. - - - :param separator: The separator of this TableDto. # noqa: E501 - :type: str - """ - if separator is None: - raise ValueError("Invalid value for `separator`, must not be `None`") # noqa: E501 - - self._separator = separator - - @property - def quote(self): - """Gets the quote of this TableDto. # noqa: E501 - - - :return: The quote of this TableDto. # noqa: E501 - :rtype: str - """ - return self._quote - - @quote.setter - def quote(self, quote): - """Sets the quote of this TableDto. - - - :param quote: The quote of this TableDto. # noqa: E501 - :type: str - """ - if quote is None: - raise ValueError("Invalid value for `quote`, must not be `None`") # noqa: E501 - - self._quote = quote - @property def created(self): """Gets the created of this TableDto. # noqa: E501 @@ -298,92 +225,6 @@ class TableDto(object): self._internal_name = internal_name - @property - def null_element(self): - """Gets the null_element of this TableDto. # noqa: E501 - - - :return: The null_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._null_element - - @null_element.setter - def null_element(self, null_element): - """Sets the null_element of this TableDto. - - - :param null_element: The null_element of this TableDto. # noqa: E501 - :type: str - """ - if null_element is None: - raise ValueError("Invalid value for `null_element`, must not be `None`") # noqa: E501 - - self._null_element = null_element - - @property - def skip_lines(self): - """Gets the skip_lines of this TableDto. # noqa: E501 - - - :return: The skip_lines of this TableDto. # noqa: E501 - :rtype: int - """ - return self._skip_lines - - @skip_lines.setter - def skip_lines(self, skip_lines): - """Sets the skip_lines of this TableDto. - - - :param skip_lines: The skip_lines of this TableDto. # noqa: E501 - :type: int - """ - - self._skip_lines = skip_lines - - @property - def true_element(self): - """Gets the true_element of this TableDto. # noqa: E501 - - - :return: The true_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._true_element - - @true_element.setter - def true_element(self, true_element): - """Sets the true_element of this TableDto. - - - :param true_element: The true_element of this TableDto. # noqa: E501 - :type: str - """ - - self._true_element = true_element - - @property - def false_element(self): - """Gets the false_element of this TableDto. # noqa: E501 - - - :return: The false_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._false_element - - @false_element.setter - def false_element(self, false_element): - """Sets the false_element of this TableDto. - - - :param false_element: The false_element of this TableDto. # noqa: E501 - :type: str - """ - - self._false_element = false_element - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_container/models/user_dto.py b/.invenio/api_container/models/user_dto.py index a2182eea8d0e39ef597b9fbea3851ba5fd5464d1..9dd033399bf56177f003d6a6ab08da356ff3732f 100644 --- a/.invenio/api_container/models/user_dto.py +++ b/.invenio/api_container/models/user_dto.py @@ -31,52 +31,51 @@ class UserDto(object): 'id': 'int', 'authorities': 'list[GrantedAuthorityDto]', 'username': 'str', - 'titles_before': 'str', - 'titles_after': 'str', 'firstname': 'str', 'lastname': 'str', 'containers': 'list[ContainerDto]', 'databases': 'list[ContainerDto]', 'identifiers': 'list[ContainerDto]', - 'email': 'str' + 'email': 'str', + 'titles_before': 'str', + 'titles_after': 'str', + 'email_verified': 'bool' } attribute_map = { 'id': 'id', 'authorities': 'authorities', 'username': 'username', - 'titles_before': 'titlesBefore', - 'titles_after': 'titlesAfter', 'firstname': 'firstname', 'lastname': 'lastname', 'containers': 'containers', 'databases': 'databases', 'identifiers': 'identifiers', - 'email': 'email' + 'email': 'email', + 'titles_before': 'titles_before', + 'titles_after': 'titles_after', + 'email_verified': 'email_verified' } - def __init__(self, id=None, authorities=None, username=None, titles_before=None, titles_after=None, firstname=None, lastname=None, containers=None, databases=None, identifiers=None, email=None): # noqa: E501 + def __init__(self, id=None, authorities=None, username=None, firstname=None, lastname=None, containers=None, databases=None, identifiers=None, email=None, titles_before=None, titles_after=None, email_verified=None): # noqa: E501 """UserDto - a model defined in Swagger""" # noqa: E501 self._id = None self._authorities = None self._username = None - self._titles_before = None - self._titles_after = None self._firstname = None self._lastname = None self._containers = None self._databases = None self._identifiers = None self._email = None + self._titles_before = None + self._titles_after = None + self._email_verified = None self.discriminator = None self.id = id if authorities is not None: self.authorities = authorities self.username = username - if titles_before is not None: - self.titles_before = titles_before - if titles_after is not None: - self.titles_after = titles_after if firstname is not None: self.firstname = firstname if lastname is not None: @@ -88,6 +87,12 @@ class UserDto(object): if identifiers is not None: self.identifiers = identifiers self.email = email + if titles_before is not None: + self.titles_before = titles_before + if titles_after is not None: + self.titles_after = titles_after + if email_verified is not None: + self.email_verified = email_verified @property def id(self): @@ -156,48 +161,6 @@ class UserDto(object): self._username = username - @property - def titles_before(self): - """Gets the titles_before of this UserDto. # noqa: E501 - - - :return: The titles_before of this UserDto. # noqa: E501 - :rtype: str - """ - return self._titles_before - - @titles_before.setter - def titles_before(self, titles_before): - """Sets the titles_before of this UserDto. - - - :param titles_before: The titles_before of this UserDto. # noqa: E501 - :type: str - """ - - self._titles_before = titles_before - - @property - def titles_after(self): - """Gets the titles_after of this UserDto. # noqa: E501 - - - :return: The titles_after of this UserDto. # noqa: E501 - :rtype: str - """ - return self._titles_after - - @titles_after.setter - def titles_after(self, titles_after): - """Sets the titles_after of this UserDto. - - - :param titles_after: The titles_after of this UserDto. # noqa: E501 - :type: str - """ - - self._titles_after = titles_after - @property def firstname(self): """Gets the firstname of this UserDto. # noqa: E501 @@ -326,6 +289,69 @@ class UserDto(object): self._email = email + @property + def titles_before(self): + """Gets the titles_before of this UserDto. # noqa: E501 + + + :return: The titles_before of this UserDto. # noqa: E501 + :rtype: str + """ + return self._titles_before + + @titles_before.setter + def titles_before(self, titles_before): + """Sets the titles_before of this UserDto. + + + :param titles_before: The titles_before of this UserDto. # noqa: E501 + :type: str + """ + + self._titles_before = titles_before + + @property + def titles_after(self): + """Gets the titles_after of this UserDto. # noqa: E501 + + + :return: The titles_after of this UserDto. # noqa: E501 + :rtype: str + """ + return self._titles_after + + @titles_after.setter + def titles_after(self, titles_after): + """Sets the titles_after of this UserDto. + + + :param titles_after: The titles_after of this UserDto. # noqa: E501 + :type: str + """ + + self._titles_after = titles_after + + @property + def email_verified(self): + """Gets the email_verified of this UserDto. # noqa: E501 + + + :return: The email_verified of this UserDto. # noqa: E501 + :rtype: bool + """ + return self._email_verified + + @email_verified.setter + def email_verified(self, email_verified): + """Sets the email_verified of this UserDto. + + + :param email_verified: The email_verified of this UserDto. # noqa: E501 + :type: bool + """ + + self._email_verified = email_verified + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_database/__init__.py b/.invenio/api_database/__init__.py index 73fdbaa8c3abd7522670376869dc39e173f51f43..ed4e62c5737bdb8a7330c9004a80603f708ce616 100644 --- a/.invenio/api_database/__init__.py +++ b/.invenio/api_database/__init__.py @@ -16,6 +16,7 @@ from __future__ import absolute_import # import apis into sdk package from api_database.api.container_database_endpoint_api import ContainerDatabaseEndpointApi +from api_database.api.license_endpoint_api import LicenseEndpointApi # import ApiClient from api_database.api_client import ApiClient from api_database.configuration import Configuration @@ -32,5 +33,6 @@ from api_database.models.granted_authority_dto import GrantedAuthorityDto from api_database.models.image_date_dto import ImageDateDto from api_database.models.image_dto import ImageDto from api_database.models.image_env_item_dto import ImageEnvItemDto +from api_database.models.license_dto import LicenseDto from api_database.models.table_dto import TableDto from api_database.models.user_dto import UserDto diff --git a/.invenio/api_database/api/__init__.py b/.invenio/api_database/api/__init__.py index c262eb636dc22a4ce24b2d1f0fd9b42a1f88515c..959020dc689c6249ff09f0ad9b73c919356b2c83 100644 --- a/.invenio/api_database/api/__init__.py +++ b/.invenio/api_database/api/__init__.py @@ -4,3 +4,4 @@ from __future__ import absolute_import # import apis into api package from api_database.api.container_database_endpoint_api import ContainerDatabaseEndpointApi +from api_database.api.license_endpoint_api import LicenseEndpointApi diff --git a/.invenio/api_database/api/container_database_endpoint_api.py b/.invenio/api_database/api/container_database_endpoint_api.py index c1c9eb5e1b0c3b41a7aaf35fb627e4d590987b0a..d7026e61af1d2aa042823b49df1950219703bc18 100644 --- a/.invenio/api_database/api/container_database_endpoint_api.py +++ b/.invenio/api_database/api/container_database_endpoint_api.py @@ -137,12 +137,12 @@ class ContainerDatabaseEndpointApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def delete(self, id, database_id, **kwargs): # noqa: E501 + def delete1(self, id, database_id, **kwargs): # noqa: E501 """Delete some database # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete(id, database_id, async_req=True) + >>> thread = api.delete1(id, database_id, async_req=True) >>> result = thread.get() :param async_req bool @@ -154,17 +154,17 @@ class ContainerDatabaseEndpointApi(object): """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.delete_with_http_info(id, database_id, **kwargs) # noqa: E501 + return self.delete1_with_http_info(id, database_id, **kwargs) # noqa: E501 else: - (data) = self.delete_with_http_info(id, database_id, **kwargs) # noqa: E501 + (data) = self.delete1_with_http_info(id, database_id, **kwargs) # noqa: E501 return data - def delete_with_http_info(self, id, database_id, **kwargs): # noqa: E501 + def delete1_with_http_info(self, id, database_id, **kwargs): # noqa: E501 """Delete some database # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_with_http_info(id, database_id, async_req=True) + >>> thread = api.delete1_with_http_info(id, database_id, async_req=True) >>> result = thread.get() :param async_req bool @@ -186,18 +186,18 @@ class ContainerDatabaseEndpointApi(object): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method delete" % key + " to method delete1" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id' is set if ('id' not in params or params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `delete`") # noqa: E501 + raise ValueError("Missing the required parameter `id` when calling `delete1`") # noqa: E501 # verify the required parameter 'database_id' is set if ('database_id' not in params or params['database_id'] is None): - raise ValueError("Missing the required parameter `database_id` when calling `delete`") # noqa: E501 + raise ValueError("Missing the required parameter `database_id` when calling `delete1`") # noqa: E501 collection_formats = {} @@ -414,7 +414,7 @@ class ContainerDatabaseEndpointApi(object): ['*/*']) # noqa: E501 # Authentication setting - auth_settings = [] # noqa: E501 + auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( '/api/container/{id}/database/{databaseId}', 'GET', diff --git a/.invenio/api_database/models/__init__.py b/.invenio/api_database/models/__init__.py index 8e5145caf9ff27f252386f251c18119350c0e7d0..014aafdf58e62de2565d5f10f5e9481c25223e4f 100644 --- a/.invenio/api_database/models/__init__.py +++ b/.invenio/api_database/models/__init__.py @@ -26,5 +26,6 @@ from api_database.models.granted_authority_dto import GrantedAuthorityDto from api_database.models.image_date_dto import ImageDateDto from api_database.models.image_dto import ImageDto from api_database.models.image_env_item_dto import ImageEnvItemDto +from api_database.models.license_dto import LicenseDto from api_database.models.table_dto import TableDto from api_database.models.user_dto import UserDto diff --git a/.invenio/api_database/models/database_brief_dto.py b/.invenio/api_database/models/database_brief_dto.py index 4052f8f245534bfd7761c4b9c8917b8106639d35..050f9e2e3a3aeea34ecc126d4b08b203d562c1e1 100644 --- a/.invenio/api_database/models/database_brief_dto.py +++ b/.invenio/api_database/models/database_brief_dto.py @@ -32,7 +32,9 @@ class DatabaseBriefDto(object): 'name': 'str', 'description': 'str', 'engine': 'str', - 'created': 'datetime' + 'creator': 'UserDto', + 'created': 'datetime', + 'is_public': 'bool' } attribute_map = { @@ -40,23 +42,33 @@ class DatabaseBriefDto(object): 'name': 'name', 'description': 'description', 'engine': 'engine', - 'created': 'created' + 'creator': 'creator', + 'created': 'created', + 'is_public': 'is_public' } - def __init__(self, id=None, name=None, description=None, engine=None, created=None): # noqa: E501 + def __init__(self, id=None, name=None, description=None, engine=None, creator=None, created=None, is_public=None): # noqa: E501 """DatabaseBriefDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._description = None self._engine = None + self._creator = None self._created = None + self._is_public = None self.discriminator = None self.id = id self.name = name - self.description = description - self.engine = engine + if description is not None: + self.description = description + if engine is not None: + self.engine = engine + if creator is not None: + self.creator = creator if created is not None: self.created = created + if is_public is not None: + self.is_public = is_public @property def id(self): @@ -122,8 +134,6 @@ class DatabaseBriefDto(object): :param description: The description of this DatabaseBriefDto. # noqa: E501 :type: str """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 self._description = description @@ -145,11 +155,30 @@ class DatabaseBriefDto(object): :param engine: The engine of this DatabaseBriefDto. # noqa: E501 :type: str """ - if engine is None: - raise ValueError("Invalid value for `engine`, must not be `None`") # noqa: E501 self._engine = engine + @property + def creator(self): + """Gets the creator of this DatabaseBriefDto. # noqa: E501 + + + :return: The creator of this DatabaseBriefDto. # noqa: E501 + :rtype: UserDto + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this DatabaseBriefDto. + + + :param creator: The creator of this DatabaseBriefDto. # noqa: E501 + :type: UserDto + """ + + self._creator = creator + @property def created(self): """Gets the created of this DatabaseBriefDto. # noqa: E501 @@ -171,6 +200,27 @@ class DatabaseBriefDto(object): self._created = created + @property + def is_public(self): + """Gets the is_public of this DatabaseBriefDto. # noqa: E501 + + + :return: The is_public of this DatabaseBriefDto. # noqa: E501 + :rtype: bool + """ + return self._is_public + + @is_public.setter + def is_public(self, is_public): + """Sets the is_public of this DatabaseBriefDto. + + + :param is_public: The is_public of this DatabaseBriefDto. # noqa: E501 + :type: bool + """ + + self._is_public = is_public + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_database/models/database_dto.py b/.invenio/api_database/models/database_dto.py index 046009d24722e09545c194d0fc15c463931ce42d..eb2dbf9e87545e941d0325ee098297298fdaf708 100644 --- a/.invenio/api_database/models/database_dto.py +++ b/.invenio/api_database/models/database_dto.py @@ -30,71 +30,97 @@ class DatabaseDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'exchange': 'str', + 'creator': 'UserDto', + 'subjects': 'list[str]', + 'language': 'str', + 'license': 'LicenseDto', 'description': 'str', 'publisher': 'str', - 'license': 'str', 'contact': 'UserDto', 'tables': 'list[TableDto]', - 'exchange': 'str', 'image': 'ImageDto', 'container': 'ContainerDto', 'created': 'datetime', 'deleted': 'datetime', - 'internal_name': 'str' + 'internal_name': 'str', + 'publication_year': 'int', + 'is_public': 'bool' } attribute_map = { 'id': 'id', 'name': 'name', + 'exchange': 'exchange', + 'creator': 'creator', + 'subjects': 'subjects', + 'language': 'language', + 'license': 'license', 'description': 'description', 'publisher': 'publisher', - 'license': 'license', 'contact': 'contact', 'tables': 'tables', - 'exchange': 'exchange', 'image': 'image', 'container': 'container', 'created': 'created', 'deleted': 'deleted', - 'internal_name': 'internal_name' + 'internal_name': 'internal_name', + 'publication_year': 'publication_year', + 'is_public': 'is_public' } - def __init__(self, id=None, name=None, description=None, publisher=None, license=None, contact=None, tables=None, exchange=None, image=None, container=None, created=None, deleted=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, exchange=None, creator=None, subjects=None, language=None, license=None, description=None, publisher=None, contact=None, tables=None, image=None, container=None, created=None, deleted=None, internal_name=None, publication_year=None, is_public=None): # noqa: E501 """DatabaseDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._exchange = None + self._creator = None + self._subjects = None + self._language = None + self._license = None self._description = None self._publisher = None - self._license = None self._contact = None self._tables = None - self._exchange = None self._image = None self._container = None self._created = None self._deleted = None self._internal_name = None + self._publication_year = None + self._is_public = None self.discriminator = None self.id = id self.name = name - self.description = description - if publisher is not None: - self.publisher = publisher + self.exchange = exchange + self.creator = creator + if subjects is not None: + self.subjects = subjects + if language is not None: + self.language = language if license is not None: self.license = license + if description is not None: + self.description = description + if publisher is not None: + self.publisher = publisher if contact is not None: self.contact = contact if tables is not None: self.tables = tables - self.exchange = exchange if image is not None: self.image = image if container is not None: self.container = container - self.created = created + if created is not None: + self.created = created if deleted is not None: self.deleted = deleted self.internal_name = internal_name + if publication_year is not None: + self.publication_year = publication_year + if is_public is not None: + self.is_public = is_public @property def id(self): @@ -143,48 +169,98 @@ class DatabaseDto(object): self._name = name @property - def description(self): - """Gets the description of this DatabaseDto. # noqa: E501 + def exchange(self): + """Gets the exchange of this DatabaseDto. # noqa: E501 - :return: The description of this DatabaseDto. # noqa: E501 + :return: The exchange of this DatabaseDto. # noqa: E501 :rtype: str """ - return self._description + return self._exchange - @description.setter - def description(self, description): - """Sets the description of this DatabaseDto. + @exchange.setter + def exchange(self, exchange): + """Sets the exchange of this DatabaseDto. - :param description: The description of this DatabaseDto. # noqa: E501 + :param exchange: The exchange of this DatabaseDto. # noqa: E501 :type: str """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 + if exchange is None: + raise ValueError("Invalid value for `exchange`, must not be `None`") # noqa: E501 - self._description = description + self._exchange = exchange @property - def publisher(self): - """Gets the publisher of this DatabaseDto. # noqa: E501 + def creator(self): + """Gets the creator of this DatabaseDto. # noqa: E501 - :return: The publisher of this DatabaseDto. # noqa: E501 + :return: The creator of this DatabaseDto. # noqa: E501 + :rtype: UserDto + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this DatabaseDto. + + + :param creator: The creator of this DatabaseDto. # noqa: E501 + :type: UserDto + """ + if creator is None: + raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + + self._creator = creator + + @property + def subjects(self): + """Gets the subjects of this DatabaseDto. # noqa: E501 + + + :return: The subjects of this DatabaseDto. # noqa: E501 + :rtype: list[str] + """ + return self._subjects + + @subjects.setter + def subjects(self, subjects): + """Sets the subjects of this DatabaseDto. + + + :param subjects: The subjects of this DatabaseDto. # noqa: E501 + :type: list[str] + """ + + self._subjects = subjects + + @property + def language(self): + """Gets the language of this DatabaseDto. # noqa: E501 + + + :return: The language of this DatabaseDto. # noqa: E501 :rtype: str """ - return self._publisher + return self._language - @publisher.setter - def publisher(self, publisher): - """Sets the publisher of this DatabaseDto. + @language.setter + def language(self, language): + """Sets the language of this DatabaseDto. - :param publisher: The publisher of this DatabaseDto. # noqa: E501 + :param language: The language of this DatabaseDto. # noqa: E501 :type: str """ + allowed_values = ["ab", "aa", "af", "ak", "sq", "am", "ar", "an", "hy", "as", "av", "ae", "ay", "az", "bm", "ba", "eu", "be", "bn", "bh", "bi", "bs", "br", "bg", "my", "ca", "km", "ch", "ce", "ny", "zh", "cu", "cv", "kw", "co", "cr", "hr", "cs", "da", "dv", "nl", "dz", "en", "eo", "et", "ee", "fo", "fj", "fi", "fr", "ff", "gd", "gl", "lg", "ka", "de", "ki", "el", "kl", "gn", "gu", "ht", "ha", "he", "hz", "hi", "ho", "hu", "is", "io", "ig", "id", "ia", "ie", "iu", "ik", "ga", "it", "ja", "jv", "kn", "kr", "ks", "kk", "rw", "kv", "kg", "ko", "kj", "ku", "ky", "lo", "la", "lv", "lb", "li", "ln", "lt", "lu", "mk", "mg", "ms", "ml", "mt", "gv", "mi", "mr", "mh", "ro", "mn", "na", "nv", "nd", "ng", "ne", "se", "no", "nb", "nn", "ii", "oc", "oj", "or", "om", "os", "pi", "pa", "ps", "fa", "pl", "pt", "qu", "rm", "rn", "ru", "sm", "sg", "sa", "sc", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "nr", "es", "su", "sw", "ss", "sv", "tl", "ty", "tg", "ta", "tt", "te", "th", "bo", "ti", "to", "ts", "tn", "tr", "tk", "tw", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "cy", "fy", "wo", "xh", "yi", "yo", "za", "zu"] # noqa: E501 + if language not in allowed_values: + raise ValueError( + "Invalid value for `language` ({0}), must be one of {1}" # noqa: E501 + .format(language, allowed_values) + ) - self._publisher = publisher + self._language = language @property def license(self): @@ -192,7 +268,7 @@ class DatabaseDto(object): :return: The license of this DatabaseDto. # noqa: E501 - :rtype: str + :rtype: LicenseDto """ return self._license @@ -202,11 +278,53 @@ class DatabaseDto(object): :param license: The license of this DatabaseDto. # noqa: E501 - :type: str + :type: LicenseDto """ self._license = license + @property + def description(self): + """Gets the description of this DatabaseDto. # noqa: E501 + + + :return: The description of this DatabaseDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this DatabaseDto. + + + :param description: The description of this DatabaseDto. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def publisher(self): + """Gets the publisher of this DatabaseDto. # noqa: E501 + + + :return: The publisher of this DatabaseDto. # noqa: E501 + :rtype: str + """ + return self._publisher + + @publisher.setter + def publisher(self, publisher): + """Sets the publisher of this DatabaseDto. + + + :param publisher: The publisher of this DatabaseDto. # noqa: E501 + :type: str + """ + + self._publisher = publisher + @property def contact(self): """Gets the contact of this DatabaseDto. # noqa: E501 @@ -249,29 +367,6 @@ class DatabaseDto(object): self._tables = tables - @property - def exchange(self): - """Gets the exchange of this DatabaseDto. # noqa: E501 - - - :return: The exchange of this DatabaseDto. # noqa: E501 - :rtype: str - """ - return self._exchange - - @exchange.setter - def exchange(self, exchange): - """Sets the exchange of this DatabaseDto. - - - :param exchange: The exchange of this DatabaseDto. # noqa: E501 - :type: str - """ - if exchange is None: - raise ValueError("Invalid value for `exchange`, must not be `None`") # noqa: E501 - - self._exchange = exchange - @property def image(self): """Gets the image of this DatabaseDto. # noqa: E501 @@ -332,8 +427,6 @@ class DatabaseDto(object): :param created: The created of this DatabaseDto. # noqa: E501 :type: datetime """ - if created is None: - raise ValueError("Invalid value for `created`, must not be `None`") # noqa: E501 self._created = created @@ -381,6 +474,48 @@ class DatabaseDto(object): self._internal_name = internal_name + @property + def publication_year(self): + """Gets the publication_year of this DatabaseDto. # noqa: E501 + + + :return: The publication_year of this DatabaseDto. # noqa: E501 + :rtype: int + """ + return self._publication_year + + @publication_year.setter + def publication_year(self, publication_year): + """Sets the publication_year of this DatabaseDto. + + + :param publication_year: The publication_year of this DatabaseDto. # noqa: E501 + :type: int + """ + + self._publication_year = publication_year + + @property + def is_public(self): + """Gets the is_public of this DatabaseDto. # noqa: E501 + + + :return: The is_public of this DatabaseDto. # noqa: E501 + :rtype: bool + """ + return self._is_public + + @is_public.setter + def is_public(self, is_public): + """Sets the is_public of this DatabaseDto. + + + :param is_public: The is_public of this DatabaseDto. # noqa: E501 + :type: bool + """ + + self._is_public = is_public + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_database/models/database_modify_dto.py b/.invenio/api_database/models/database_modify_dto.py index d40996f34ef62b42f35b7bdb9c47414f06e06fb2..f61145aa15e81aaf865f5b7d13e37deb8d1a2386 100644 --- a/.invenio/api_database/models/database_modify_dto.py +++ b/.invenio/api_database/models/database_modify_dto.py @@ -28,38 +28,73 @@ class DatabaseModifyDto(object): and the value is json key in definition. """ swagger_types = { + 'subject': 'list[str]', 'description': 'str', 'publisher': 'str', - 'license': 'str', + 'license': 'LicenseDto', + 'language': 'str', 'is_public': 'bool', - 'contact_person': 'int' + 'publication_year': 'int', + 'contact_person': 'str' } attribute_map = { + 'subject': 'subject', 'description': 'description', 'publisher': 'publisher', 'license': 'license', + 'language': 'language', 'is_public': 'is_public', + 'publication_year': 'publication_year', 'contact_person': 'contact_person' } - def __init__(self, description=None, publisher=None, license=None, is_public=None, contact_person=None): # noqa: E501 + def __init__(self, subject=None, description=None, publisher=None, license=None, language=None, is_public=None, publication_year=None, contact_person=None): # noqa: E501 """DatabaseModifyDto - a model defined in Swagger""" # noqa: E501 + self._subject = None self._description = None self._publisher = None self._license = None + self._language = None self._is_public = None + self._publication_year = None self._contact_person = None self.discriminator = None + if subject is not None: + self.subject = subject self.description = description if publisher is not None: self.publisher = publisher if license is not None: self.license = license + if language is not None: + self.language = language self.is_public = is_public + self.publication_year = publication_year if contact_person is not None: self.contact_person = contact_person + @property + def subject(self): + """Gets the subject of this DatabaseModifyDto. # noqa: E501 + + + :return: The subject of this DatabaseModifyDto. # noqa: E501 + :rtype: list[str] + """ + return self._subject + + @subject.setter + def subject(self, subject): + """Sets the subject of this DatabaseModifyDto. + + + :param subject: The subject of this DatabaseModifyDto. # noqa: E501 + :type: list[str] + """ + + self._subject = subject + @property def description(self): """Gets the description of this DatabaseModifyDto. # noqa: E501 @@ -110,7 +145,7 @@ class DatabaseModifyDto(object): :return: The license of this DatabaseModifyDto. # noqa: E501 - :rtype: str + :rtype: LicenseDto """ return self._license @@ -120,11 +155,38 @@ class DatabaseModifyDto(object): :param license: The license of this DatabaseModifyDto. # noqa: E501 - :type: str + :type: LicenseDto """ self._license = license + @property + def language(self): + """Gets the language of this DatabaseModifyDto. # noqa: E501 + + + :return: The language of this DatabaseModifyDto. # noqa: E501 + :rtype: str + """ + return self._language + + @language.setter + def language(self, language): + """Sets the language of this DatabaseModifyDto. + + + :param language: The language of this DatabaseModifyDto. # noqa: E501 + :type: str + """ + allowed_values = ["ab", "aa", "af", "ak", "sq", "am", "ar", "an", "hy", "as", "av", "ae", "ay", "az", "bm", "ba", "eu", "be", "bn", "bh", "bi", "bs", "br", "bg", "my", "ca", "km", "ch", "ce", "ny", "zh", "cu", "cv", "kw", "co", "cr", "hr", "cs", "da", "dv", "nl", "dz", "en", "eo", "et", "ee", "fo", "fj", "fi", "fr", "ff", "gd", "gl", "lg", "ka", "de", "ki", "el", "kl", "gn", "gu", "ht", "ha", "he", "hz", "hi", "ho", "hu", "is", "io", "ig", "id", "ia", "ie", "iu", "ik", "ga", "it", "ja", "jv", "kn", "kr", "ks", "kk", "rw", "kv", "kg", "ko", "kj", "ku", "ky", "lo", "la", "lv", "lb", "li", "ln", "lt", "lu", "mk", "mg", "ms", "ml", "mt", "gv", "mi", "mr", "mh", "ro", "mn", "na", "nv", "nd", "ng", "ne", "se", "no", "nb", "nn", "ii", "oc", "oj", "or", "om", "os", "pi", "pa", "ps", "fa", "pl", "pt", "qu", "rm", "rn", "ru", "sm", "sg", "sa", "sc", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "nr", "es", "su", "sw", "ss", "sv", "tl", "ty", "tg", "ta", "tt", "te", "th", "bo", "ti", "to", "ts", "tn", "tr", "tk", "tw", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "cy", "fy", "wo", "xh", "yi", "yo", "za", "zu"] # noqa: E501 + if language not in allowed_values: + raise ValueError( + "Invalid value for `language` ({0}), must be one of {1}" # noqa: E501 + .format(language, allowed_values) + ) + + self._language = language + @property def is_public(self): """Gets the is_public of this DatabaseModifyDto. # noqa: E501 @@ -148,13 +210,36 @@ class DatabaseModifyDto(object): self._is_public = is_public + @property + def publication_year(self): + """Gets the publication_year of this DatabaseModifyDto. # noqa: E501 + + + :return: The publication_year of this DatabaseModifyDto. # noqa: E501 + :rtype: int + """ + return self._publication_year + + @publication_year.setter + def publication_year(self, publication_year): + """Sets the publication_year of this DatabaseModifyDto. + + + :param publication_year: The publication_year of this DatabaseModifyDto. # noqa: E501 + :type: int + """ + if publication_year is None: + raise ValueError("Invalid value for `publication_year`, must not be `None`") # noqa: E501 + + self._publication_year = publication_year + @property def contact_person(self): """Gets the contact_person of this DatabaseModifyDto. # noqa: E501 :return: The contact_person of this DatabaseModifyDto. # noqa: E501 - :rtype: int + :rtype: str """ return self._contact_person @@ -164,7 +249,7 @@ class DatabaseModifyDto(object): :param contact_person: The contact_person of this DatabaseModifyDto. # noqa: E501 - :type: int + :type: str """ self._contact_person = contact_person diff --git a/.invenio/api_database/models/table_dto.py b/.invenio/api_database/models/table_dto.py index 0d769bd1b76bd0091160985a99a26a9706ba7171..4206ee0d4928bb33508b7fa1afb26059dda97e07 100644 --- a/.invenio/api_database/models/table_dto.py +++ b/.invenio/api_database/models/table_dto.py @@ -32,15 +32,9 @@ class TableDto(object): 'name': 'str', 'topic': 'str', 'description': 'str', - 'separator': 'str', - 'quote': 'str', 'created': 'datetime', 'columns': 'list[ColumnDto]', - 'internal_name': 'str', - 'null_element': 'str', - 'skip_lines': 'int', - 'true_element': 'str', - 'false_element': 'str' + 'internal_name': 'str' } attribute_map = { @@ -48,50 +42,29 @@ class TableDto(object): 'name': 'name', 'topic': 'topic', 'description': 'description', - 'separator': 'separator', - 'quote': 'quote', 'created': 'created', 'columns': 'columns', - 'internal_name': 'internal_name', - 'null_element': 'null_element', - 'skip_lines': 'skip_lines', - 'true_element': 'true_element', - 'false_element': 'false_element' + 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, topic=None, description=None, separator=None, quote=None, created=None, columns=None, internal_name=None, null_element=None, skip_lines=None, true_element=None, false_element=None): # noqa: E501 + def __init__(self, id=None, name=None, topic=None, description=None, created=None, columns=None, internal_name=None): # noqa: E501 """TableDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._topic = None self._description = None - self._separator = None - self._quote = None self._created = None self._columns = None self._internal_name = None - self._null_element = None - self._skip_lines = None - self._true_element = None - self._false_element = None self.discriminator = None self.id = id self.name = name self.topic = topic self.description = description - self.separator = separator - self.quote = quote if created is not None: self.created = created self.columns = columns self.internal_name = internal_name - self.null_element = null_element - if skip_lines is not None: - self.skip_lines = skip_lines - if true_element is not None: - self.true_element = true_element - if false_element is not None: - self.false_element = false_element @property def id(self): @@ -185,52 +158,6 @@ class TableDto(object): self._description = description - @property - def separator(self): - """Gets the separator of this TableDto. # noqa: E501 - - - :return: The separator of this TableDto. # noqa: E501 - :rtype: str - """ - return self._separator - - @separator.setter - def separator(self, separator): - """Sets the separator of this TableDto. - - - :param separator: The separator of this TableDto. # noqa: E501 - :type: str - """ - if separator is None: - raise ValueError("Invalid value for `separator`, must not be `None`") # noqa: E501 - - self._separator = separator - - @property - def quote(self): - """Gets the quote of this TableDto. # noqa: E501 - - - :return: The quote of this TableDto. # noqa: E501 - :rtype: str - """ - return self._quote - - @quote.setter - def quote(self, quote): - """Sets the quote of this TableDto. - - - :param quote: The quote of this TableDto. # noqa: E501 - :type: str - """ - if quote is None: - raise ValueError("Invalid value for `quote`, must not be `None`") # noqa: E501 - - self._quote = quote - @property def created(self): """Gets the created of this TableDto. # noqa: E501 @@ -298,92 +225,6 @@ class TableDto(object): self._internal_name = internal_name - @property - def null_element(self): - """Gets the null_element of this TableDto. # noqa: E501 - - - :return: The null_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._null_element - - @null_element.setter - def null_element(self, null_element): - """Sets the null_element of this TableDto. - - - :param null_element: The null_element of this TableDto. # noqa: E501 - :type: str - """ - if null_element is None: - raise ValueError("Invalid value for `null_element`, must not be `None`") # noqa: E501 - - self._null_element = null_element - - @property - def skip_lines(self): - """Gets the skip_lines of this TableDto. # noqa: E501 - - - :return: The skip_lines of this TableDto. # noqa: E501 - :rtype: int - """ - return self._skip_lines - - @skip_lines.setter - def skip_lines(self, skip_lines): - """Sets the skip_lines of this TableDto. - - - :param skip_lines: The skip_lines of this TableDto. # noqa: E501 - :type: int - """ - - self._skip_lines = skip_lines - - @property - def true_element(self): - """Gets the true_element of this TableDto. # noqa: E501 - - - :return: The true_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._true_element - - @true_element.setter - def true_element(self, true_element): - """Sets the true_element of this TableDto. - - - :param true_element: The true_element of this TableDto. # noqa: E501 - :type: str - """ - - self._true_element = true_element - - @property - def false_element(self): - """Gets the false_element of this TableDto. # noqa: E501 - - - :return: The false_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._false_element - - @false_element.setter - def false_element(self, false_element): - """Sets the false_element of this TableDto. - - - :param false_element: The false_element of this TableDto. # noqa: E501 - :type: str - """ - - self._false_element = false_element - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_database/models/user_dto.py b/.invenio/api_database/models/user_dto.py index 981e91328e3ae40bb1868471a6a98ee6a656c5d2..aea425cdf1764f4f9d4fe926074fd77c8659d075 100644 --- a/.invenio/api_database/models/user_dto.py +++ b/.invenio/api_database/models/user_dto.py @@ -31,52 +31,51 @@ class UserDto(object): 'id': 'int', 'authorities': 'list[GrantedAuthorityDto]', 'username': 'str', - 'titles_before': 'str', - 'titles_after': 'str', 'firstname': 'str', 'lastname': 'str', 'containers': 'list[ContainerDto]', 'databases': 'list[ContainerDto]', 'identifiers': 'list[ContainerDto]', - 'email': 'str' + 'email': 'str', + 'titles_before': 'str', + 'titles_after': 'str', + 'email_verified': 'bool' } attribute_map = { 'id': 'id', 'authorities': 'authorities', 'username': 'username', - 'titles_before': 'titlesBefore', - 'titles_after': 'titlesAfter', 'firstname': 'firstname', 'lastname': 'lastname', 'containers': 'containers', 'databases': 'databases', 'identifiers': 'identifiers', - 'email': 'email' + 'email': 'email', + 'titles_before': 'titles_before', + 'titles_after': 'titles_after', + 'email_verified': 'email_verified' } - def __init__(self, id=None, authorities=None, username=None, titles_before=None, titles_after=None, firstname=None, lastname=None, containers=None, databases=None, identifiers=None, email=None): # noqa: E501 + def __init__(self, id=None, authorities=None, username=None, firstname=None, lastname=None, containers=None, databases=None, identifiers=None, email=None, titles_before=None, titles_after=None, email_verified=None): # noqa: E501 """UserDto - a model defined in Swagger""" # noqa: E501 self._id = None self._authorities = None self._username = None - self._titles_before = None - self._titles_after = None self._firstname = None self._lastname = None self._containers = None self._databases = None self._identifiers = None self._email = None + self._titles_before = None + self._titles_after = None + self._email_verified = None self.discriminator = None self.id = id if authorities is not None: self.authorities = authorities self.username = username - if titles_before is not None: - self.titles_before = titles_before - if titles_after is not None: - self.titles_after = titles_after if firstname is not None: self.firstname = firstname if lastname is not None: @@ -88,6 +87,12 @@ class UserDto(object): if identifiers is not None: self.identifiers = identifiers self.email = email + if titles_before is not None: + self.titles_before = titles_before + if titles_after is not None: + self.titles_after = titles_after + if email_verified is not None: + self.email_verified = email_verified @property def id(self): @@ -156,48 +161,6 @@ class UserDto(object): self._username = username - @property - def titles_before(self): - """Gets the titles_before of this UserDto. # noqa: E501 - - - :return: The titles_before of this UserDto. # noqa: E501 - :rtype: str - """ - return self._titles_before - - @titles_before.setter - def titles_before(self, titles_before): - """Sets the titles_before of this UserDto. - - - :param titles_before: The titles_before of this UserDto. # noqa: E501 - :type: str - """ - - self._titles_before = titles_before - - @property - def titles_after(self): - """Gets the titles_after of this UserDto. # noqa: E501 - - - :return: The titles_after of this UserDto. # noqa: E501 - :rtype: str - """ - return self._titles_after - - @titles_after.setter - def titles_after(self, titles_after): - """Sets the titles_after of this UserDto. - - - :param titles_after: The titles_after of this UserDto. # noqa: E501 - :type: str - """ - - self._titles_after = titles_after - @property def firstname(self): """Gets the firstname of this UserDto. # noqa: E501 @@ -326,6 +289,69 @@ class UserDto(object): self._email = email + @property + def titles_before(self): + """Gets the titles_before of this UserDto. # noqa: E501 + + + :return: The titles_before of this UserDto. # noqa: E501 + :rtype: str + """ + return self._titles_before + + @titles_before.setter + def titles_before(self, titles_before): + """Sets the titles_before of this UserDto. + + + :param titles_before: The titles_before of this UserDto. # noqa: E501 + :type: str + """ + + self._titles_before = titles_before + + @property + def titles_after(self): + """Gets the titles_after of this UserDto. # noqa: E501 + + + :return: The titles_after of this UserDto. # noqa: E501 + :rtype: str + """ + return self._titles_after + + @titles_after.setter + def titles_after(self, titles_after): + """Sets the titles_after of this UserDto. + + + :param titles_after: The titles_after of this UserDto. # noqa: E501 + :type: str + """ + + self._titles_after = titles_after + + @property + def email_verified(self): + """Gets the email_verified of this UserDto. # noqa: E501 + + + :return: The email_verified of this UserDto. # noqa: E501 + :rtype: bool + """ + return self._email_verified + + @email_verified.setter + def email_verified(self, email_verified): + """Sets the email_verified of this UserDto. + + + :param email_verified: The email_verified of this UserDto. # noqa: E501 + :type: bool + """ + + self._email_verified = email_verified + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_document/models/import_dto.py b/.invenio/api_document/models/import_dto.py index 0c43eebe7b1f375290677fd772e22b0b1f0962e2..e02a0bdd58964e4a722980d55b2fab833156839e 100644 --- a/.invenio/api_document/models/import_dto.py +++ b/.invenio/api_document/models/import_dto.py @@ -28,18 +28,47 @@ class ImportDto(object): and the value is json key in definition. """ swagger_types = { - 'location': 'str' + 'location': 'str', + 'separator': 'str', + 'quote': 'str', + 'skip_lines': 'int', + 'false_element': 'str', + 'true_element': 'str', + 'null_element': 'str' } attribute_map = { - 'location': 'location' + 'location': 'location', + 'separator': 'separator', + 'quote': 'quote', + 'skip_lines': 'skip_lines', + 'false_element': 'false_element', + 'true_element': 'true_element', + 'null_element': 'null_element' } - def __init__(self, location=None): # noqa: E501 + def __init__(self, location=None, separator=None, quote=None, skip_lines=None, false_element=None, true_element=None, null_element=None): # noqa: E501 """ImportDto - a model defined in Swagger""" # noqa: E501 self._location = None + self._separator = None + self._quote = None + self._skip_lines = None + self._false_element = None + self._true_element = None + self._null_element = None self.discriminator = None self.location = location + self.separator = separator + if quote is not None: + self.quote = quote + if skip_lines is not None: + self.skip_lines = skip_lines + if false_element is not None: + self.false_element = false_element + if true_element is not None: + self.true_element = true_element + if null_element is not None: + self.null_element = null_element @property def location(self): @@ -64,6 +93,134 @@ class ImportDto(object): self._location = location + @property + def separator(self): + """Gets the separator of this ImportDto. # noqa: E501 + + + :return: The separator of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._separator + + @separator.setter + def separator(self, separator): + """Sets the separator of this ImportDto. + + + :param separator: The separator of this ImportDto. # noqa: E501 + :type: str + """ + if separator is None: + raise ValueError("Invalid value for `separator`, must not be `None`") # noqa: E501 + + self._separator = separator + + @property + def quote(self): + """Gets the quote of this ImportDto. # noqa: E501 + + + :return: The quote of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._quote + + @quote.setter + def quote(self, quote): + """Sets the quote of this ImportDto. + + + :param quote: The quote of this ImportDto. # noqa: E501 + :type: str + """ + + self._quote = quote + + @property + def skip_lines(self): + """Gets the skip_lines of this ImportDto. # noqa: E501 + + + :return: The skip_lines of this ImportDto. # noqa: E501 + :rtype: int + """ + return self._skip_lines + + @skip_lines.setter + def skip_lines(self, skip_lines): + """Sets the skip_lines of this ImportDto. + + + :param skip_lines: The skip_lines of this ImportDto. # noqa: E501 + :type: int + """ + + self._skip_lines = skip_lines + + @property + def false_element(self): + """Gets the false_element of this ImportDto. # noqa: E501 + + + :return: The false_element of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._false_element + + @false_element.setter + def false_element(self, false_element): + """Sets the false_element of this ImportDto. + + + :param false_element: The false_element of this ImportDto. # noqa: E501 + :type: str + """ + + self._false_element = false_element + + @property + def true_element(self): + """Gets the true_element of this ImportDto. # noqa: E501 + + + :return: The true_element of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._true_element + + @true_element.setter + def true_element(self, true_element): + """Sets the true_element of this ImportDto. + + + :param true_element: The true_element of this ImportDto. # noqa: E501 + :type: str + """ + + self._true_element = true_element + + @property + def null_element(self): + """Gets the null_element of this ImportDto. # noqa: E501 + + + :return: The null_element of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._null_element + + @null_element.setter + def null_element(self, null_element): + """Sets the null_element of this ImportDto. + + + :param null_element: The null_element of this ImportDto. # noqa: E501 + :type: str + """ + + self._null_element = null_element + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_identifier/__init__.py b/.invenio/api_identifier/__init__.py index f683d78360276fe8808933d407eeddc7c67d33c9..78ac494273bbb2a8f5f5beaf0c412d4eccac29ff 100644 --- a/.invenio/api_identifier/__init__.py +++ b/.invenio/api_identifier/__init__.py @@ -22,5 +22,20 @@ from api_identifier.api_client import ApiClient from api_identifier.configuration import Configuration # import models into sdk package from api_identifier.models.api_error_dto import ApiErrorDto +from api_identifier.models.column_dto import ColumnDto +from api_identifier.models.concept_dto import ConceptDto +from api_identifier.models.container_dto import ContainerDto +from api_identifier.models.creator_create_dto import CreatorCreateDto from api_identifier.models.creator_dto import CreatorDto +from api_identifier.models.database_dto import DatabaseDto +from api_identifier.models.granted_authority_dto import GrantedAuthorityDto +from api_identifier.models.identifier_create_dto import IdentifierCreateDto from api_identifier.models.identifier_dto import IdentifierDto +from api_identifier.models.image_date_dto import ImageDateDto +from api_identifier.models.image_dto import ImageDto +from api_identifier.models.image_env_item_dto import ImageEnvItemDto +from api_identifier.models.license_dto import LicenseDto +from api_identifier.models.related_identifier_create_dto import RelatedIdentifierCreateDto +from api_identifier.models.related_identifier_dto import RelatedIdentifierDto +from api_identifier.models.table_dto import TableDto +from api_identifier.models.user_dto import UserDto diff --git a/.invenio/api_identifier/api/identifier_endpoint_api.py b/.invenio/api_identifier/api/identifier_endpoint_api.py index fff08b1304d16c475b6c0dd316dd548a7bc94b63..c481c9ff454520d489156ea4d9e1c2ba6840c353 100644 --- a/.invenio/api_identifier/api/identifier_endpoint_api.py +++ b/.invenio/api_identifier/api/identifier_endpoint_api.py @@ -32,16 +32,17 @@ class IdentifierEndpointApi(object): api_client = ApiClient() self.api_client = api_client - def create(self, body, id, database_id, **kwargs): # noqa: E501 + def create(self, body, authorization, id, database_id, **kwargs): # noqa: E501 """Create identifier # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create(body, id, database_id, async_req=True) + >>> thread = api.create(body, authorization, id, database_id, async_req=True) >>> result = thread.get() :param async_req bool - :param IdentifierDto body: (required) + :param IdentifierCreateDto body: (required) + :param str authorization: (required) :param int id: (required) :param int database_id: (required) :return: IdentifierDto @@ -50,21 +51,22 @@ class IdentifierEndpointApi(object): """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.create_with_http_info(body, id, database_id, **kwargs) # noqa: E501 + return self.create_with_http_info(body, authorization, id, database_id, **kwargs) # noqa: E501 else: - (data) = self.create_with_http_info(body, id, database_id, **kwargs) # noqa: E501 + (data) = self.create_with_http_info(body, authorization, id, database_id, **kwargs) # noqa: E501 return data - def create_with_http_info(self, body, id, database_id, **kwargs): # noqa: E501 + def create_with_http_info(self, body, authorization, id, database_id, **kwargs): # noqa: E501 """Create identifier # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_with_http_info(body, id, database_id, async_req=True) + >>> thread = api.create_with_http_info(body, authorization, id, database_id, async_req=True) >>> result = thread.get() :param async_req bool - :param IdentifierDto body: (required) + :param IdentifierCreateDto body: (required) + :param str authorization: (required) :param int id: (required) :param int database_id: (required) :return: IdentifierDto @@ -72,7 +74,7 @@ class IdentifierEndpointApi(object): returns the request thread. """ - all_params = ['body', 'id', 'database_id'] # noqa: E501 + all_params = ['body', 'authorization', 'id', 'database_id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -91,6 +93,10 @@ class IdentifierEndpointApi(object): if ('body' not in params or params['body'] is None): raise ValueError("Missing the required parameter `body` when calling `create`") # noqa: E501 + # verify the required parameter 'authorization' is set + if ('authorization' not in params or + params['authorization'] is None): + raise ValueError("Missing the required parameter `authorization` when calling `create`") # noqa: E501 # verify the required parameter 'id' is set if ('id' not in params or params['id'] is None): @@ -111,6 +117,8 @@ class IdentifierEndpointApi(object): query_params = [] header_params = {} + if 'authorization' in params: + header_params['Authorization'] = params['authorization'] # noqa: E501 form_params = [] local_var_files = {} @@ -254,47 +262,47 @@ class IdentifierEndpointApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def find_all(self, id, database_id, **kwargs): # noqa: E501 - """Find identifiers # noqa: E501 + def export(self, id, database_id, identifier_id, **kwargs): # noqa: E501 + """Export some identifier metadata # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.find_all(id, database_id, async_req=True) + >>> thread = api.export(id, database_id, identifier_id, async_req=True) >>> result = thread.get() :param async_req bool :param int id: (required) :param int database_id: (required) - :param int qid: - :return: list[IdentifierDto] + :param int identifier_id: (required) + :return: str If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.find_all_with_http_info(id, database_id, **kwargs) # noqa: E501 + return self.export_with_http_info(id, database_id, identifier_id, **kwargs) # noqa: E501 else: - (data) = self.find_all_with_http_info(id, database_id, **kwargs) # noqa: E501 + (data) = self.export_with_http_info(id, database_id, identifier_id, **kwargs) # noqa: E501 return data - def find_all_with_http_info(self, id, database_id, **kwargs): # noqa: E501 - """Find identifiers # noqa: E501 + def export_with_http_info(self, id, database_id, identifier_id, **kwargs): # noqa: E501 + """Export some identifier metadata # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.find_all_with_http_info(id, database_id, async_req=True) + >>> thread = api.export_with_http_info(id, database_id, identifier_id, async_req=True) >>> result = thread.get() :param async_req bool :param int id: (required) :param int database_id: (required) - :param int qid: - :return: list[IdentifierDto] + :param int identifier_id: (required) + :return: str If the method is called asynchronously, returns the request thread. """ - all_params = ['id', 'database_id', 'qid'] # noqa: E501 + all_params = ['id', 'database_id', 'identifier_id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -305,18 +313,22 @@ class IdentifierEndpointApi(object): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method find_all" % key + " to method export" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id' is set if ('id' not in params or params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `find_all`") # noqa: E501 + raise ValueError("Missing the required parameter `id` when calling `export`") # noqa: E501 # verify the required parameter 'database_id' is set if ('database_id' not in params or params['database_id'] is None): - raise ValueError("Missing the required parameter `database_id` when calling `find_all`") # noqa: E501 + raise ValueError("Missing the required parameter `database_id` when calling `export`") # noqa: E501 + # verify the required parameter 'identifier_id' is set + if ('identifier_id' not in params or + params['identifier_id'] is None): + raise ValueError("Missing the required parameter `identifier_id` when calling `export`") # noqa: E501 collection_formats = {} @@ -325,10 +337,10 @@ class IdentifierEndpointApi(object): path_params['id'] = params['id'] # noqa: E501 if 'database_id' in params: path_params['databaseId'] = params['database_id'] # noqa: E501 + if 'identifier_id' in params: + path_params['identifierId'] = params['identifier_id'] # noqa: E501 query_params = [] - if 'qid' in params: - query_params.append(('qid', params['qid'])) # noqa: E501 header_params = {} @@ -344,14 +356,14 @@ class IdentifierEndpointApi(object): auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/container/{id}/database/{databaseId}/identifier', 'GET', + '/api/container/{id}/database/{databaseId}/identifier/{identifierId}', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='list[IdentifierDto]', # noqa: E501 + response_type='str', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -359,47 +371,47 @@ class IdentifierEndpointApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def publish(self, id, database_id, identifer_id, **kwargs): # noqa: E501 - """Publish some identifier # noqa: E501 + def find_all(self, id, database_id, **kwargs): # noqa: E501 + """Find identifiers # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.publish(id, database_id, identifer_id, async_req=True) + >>> thread = api.find_all(id, database_id, async_req=True) >>> result = thread.get() :param async_req bool :param int id: (required) :param int database_id: (required) - :param int identifer_id: (required) - :return: object + :param int qid: + :return: list[IdentifierDto] If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.publish_with_http_info(id, database_id, identifer_id, **kwargs) # noqa: E501 + return self.find_all_with_http_info(id, database_id, **kwargs) # noqa: E501 else: - (data) = self.publish_with_http_info(id, database_id, identifer_id, **kwargs) # noqa: E501 + (data) = self.find_all_with_http_info(id, database_id, **kwargs) # noqa: E501 return data - def publish_with_http_info(self, id, database_id, identifer_id, **kwargs): # noqa: E501 - """Publish some identifier # noqa: E501 + def find_all_with_http_info(self, id, database_id, **kwargs): # noqa: E501 + """Find identifiers # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.publish_with_http_info(id, database_id, identifer_id, async_req=True) + >>> thread = api.find_all_with_http_info(id, database_id, async_req=True) >>> result = thread.get() :param async_req bool :param int id: (required) :param int database_id: (required) - :param int identifer_id: (required) - :return: object + :param int qid: + :return: list[IdentifierDto] If the method is called asynchronously, returns the request thread. """ - all_params = ['id', 'database_id', 'identifer_id'] # noqa: E501 + all_params = ['id', 'database_id', 'qid'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -410,22 +422,18 @@ class IdentifierEndpointApi(object): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method publish" % key + " to method find_all" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id' is set if ('id' not in params or params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `publish`") # noqa: E501 + raise ValueError("Missing the required parameter `id` when calling `find_all`") # noqa: E501 # verify the required parameter 'database_id' is set if ('database_id' not in params or params['database_id'] is None): - raise ValueError("Missing the required parameter `database_id` when calling `publish`") # noqa: E501 - # verify the required parameter 'identifer_id' is set - if ('identifer_id' not in params or - params['identifer_id'] is None): - raise ValueError("Missing the required parameter `identifer_id` when calling `publish`") # noqa: E501 + raise ValueError("Missing the required parameter `database_id` when calling `find_all`") # noqa: E501 collection_formats = {} @@ -436,8 +444,8 @@ class IdentifierEndpointApi(object): path_params['databaseId'] = params['database_id'] # noqa: E501 query_params = [] - if 'identifer_id' in params: - query_params.append(('identiferId', params['identifer_id'])) # noqa: E501 + if 'qid' in params: + query_params.append(('qid', params['qid'])) # noqa: E501 header_params = {} @@ -450,17 +458,17 @@ class IdentifierEndpointApi(object): ['*/*']) # noqa: E501 # Authentication setting - auth_settings = ['bearerAuth'] # noqa: E501 + auth_settings = [] # noqa: E501 return self.api_client.call_api( - '/api/container/{id}/database/{databaseId}/identifier/{identiferId}', 'PUT', + '/api/container/{id}/database/{databaseId}/identifier', 'GET', path_params, query_params, header_params, body=body_params, post_params=form_params, files=local_var_files, - response_type='object', # noqa: E501 + response_type='list[IdentifierDto]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -574,7 +582,7 @@ class IdentifierEndpointApi(object): auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( - '/api/container/{id}/database/{databaseId}/identifier/{identiferId}', 'POST', + '/api/container/{id}/database/{databaseId}/identifier/{identiferId}', 'PUT', path_params, query_params, header_params, diff --git a/.invenio/api_identifier/models/__init__.py b/.invenio/api_identifier/models/__init__.py index 8aedf53aee5b7f056082bf01b59d1c27cc45a282..8a27b0c6626f164fc0a0a95e711df6389a01bba4 100644 --- a/.invenio/api_identifier/models/__init__.py +++ b/.invenio/api_identifier/models/__init__.py @@ -15,5 +15,20 @@ from __future__ import absolute_import # import models into model package from api_identifier.models.api_error_dto import ApiErrorDto +from api_identifier.models.column_dto import ColumnDto +from api_identifier.models.concept_dto import ConceptDto +from api_identifier.models.container_dto import ContainerDto +from api_identifier.models.creator_create_dto import CreatorCreateDto from api_identifier.models.creator_dto import CreatorDto +from api_identifier.models.database_dto import DatabaseDto +from api_identifier.models.granted_authority_dto import GrantedAuthorityDto +from api_identifier.models.identifier_create_dto import IdentifierCreateDto from api_identifier.models.identifier_dto import IdentifierDto +from api_identifier.models.image_date_dto import ImageDateDto +from api_identifier.models.image_dto import ImageDto +from api_identifier.models.image_env_item_dto import ImageEnvItemDto +from api_identifier.models.license_dto import LicenseDto +from api_identifier.models.related_identifier_create_dto import RelatedIdentifierCreateDto +from api_identifier.models.related_identifier_dto import RelatedIdentifierDto +from api_identifier.models.table_dto import TableDto +from api_identifier.models.user_dto import UserDto diff --git a/.invenio/api_identifier/models/creator_dto.py b/.invenio/api_identifier/models/creator_dto.py index 190c2a23557fd908712d2f5df9e369e17d7a07d1..ebe85cc6c7b14cdb49c10b1b711a06d148ab9095 100644 --- a/.invenio/api_identifier/models/creator_dto.py +++ b/.invenio/api_identifier/models/creator_dto.py @@ -61,7 +61,8 @@ class CreatorDto(object): if orcid is not None: self.orcid = orcid self.created = created - self.last_modified = last_modified + if last_modified is not None: + self.last_modified = last_modified @property def id(self): @@ -192,8 +193,6 @@ class CreatorDto(object): :param last_modified: The last_modified of this CreatorDto. # noqa: E501 :type: datetime """ - if last_modified is None: - raise ValueError("Invalid value for `last_modified`, must not be `None`") # noqa: E501 self._last_modified = last_modified diff --git a/.invenio/api_identifier/models/identifier_dto.py b/.invenio/api_identifier/models/identifier_dto.py index d3d32ab539d757138a06489c1686de0ae0b2d316..e95cec7bdbf6bde710ec8bd46def71801810aafc 100644 --- a/.invenio/api_identifier/models/identifier_dto.py +++ b/.invenio/api_identifier/models/identifier_dto.py @@ -34,10 +34,18 @@ class IdentifierDto(object): 'qid': 'int', 'title': 'str', 'description': 'str', + 'query': 'str', + 'execution': 'datetime', 'visibility': 'str', 'doi': 'str', + 'creator': 'UserDto', 'creators': 'list[CreatorDto]', 'created': 'datetime', + 'query_normalized': 'str', + 'related': 'list[RelatedIdentifierDto]', + 'query_hash': 'str', + 'result_hash': 'str', + 'result_number': 'int', 'publication_year': 'int', 'last_modified': 'datetime' } @@ -49,15 +57,23 @@ class IdentifierDto(object): 'qid': 'qid', 'title': 'title', 'description': 'description', + 'query': 'query', + 'execution': 'execution', 'visibility': 'visibility', 'doi': 'doi', + 'creator': 'creator', 'creators': 'creators', 'created': 'created', + 'query_normalized': 'query_normalized', + 'related': 'related', + 'query_hash': 'query_hash', + 'result_hash': 'result_hash', + 'result_number': 'result_number', 'publication_year': 'publication_year', 'last_modified': 'last_modified' } - def __init__(self, id=None, cid=None, dbid=None, qid=None, title=None, description=None, visibility=None, doi=None, creators=None, created=None, publication_year=None, last_modified=None): # noqa: E501 + def __init__(self, id=None, cid=None, dbid=None, qid=None, title=None, description=None, query=None, execution=None, visibility=None, doi=None, creator=None, creators=None, created=None, query_normalized=None, related=None, query_hash=None, result_hash=None, result_number=None, publication_year=None, last_modified=None): # noqa: E501 """IdentifierDto - a model defined in Swagger""" # noqa: E501 self._id = None self._cid = None @@ -65,10 +81,18 @@ class IdentifierDto(object): self._qid = None self._title = None self._description = None + self._query = None + self._execution = None self._visibility = None self._doi = None + self._creator = None self._creators = None self._created = None + self._query_normalized = None + self._related = None + self._query_hash = None + self._result_hash = None + self._result_number = None self._publication_year = None self._last_modified = None self.discriminator = None @@ -79,12 +103,21 @@ class IdentifierDto(object): self.qid = qid self.title = title self.description = description + self.query = query + self.execution = execution self.visibility = visibility if doi is not None: self.doi = doi + self.creator = creator self.creators = creators if created is not None: self.created = created + self.query_normalized = query_normalized + if related is not None: + self.related = related + self.query_hash = query_hash + self.result_hash = result_hash + self.result_number = result_number self.publication_year = publication_year if last_modified is not None: self.last_modified = last_modified @@ -225,6 +258,52 @@ class IdentifierDto(object): self._description = description + @property + def query(self): + """Gets the query of this IdentifierDto. # noqa: E501 + + + :return: The query of this IdentifierDto. # noqa: E501 + :rtype: str + """ + return self._query + + @query.setter + def query(self, query): + """Sets the query of this IdentifierDto. + + + :param query: The query of this IdentifierDto. # noqa: E501 + :type: str + """ + if query is None: + raise ValueError("Invalid value for `query`, must not be `None`") # noqa: E501 + + self._query = query + + @property + def execution(self): + """Gets the execution of this IdentifierDto. # noqa: E501 + + + :return: The execution of this IdentifierDto. # noqa: E501 + :rtype: datetime + """ + return self._execution + + @execution.setter + def execution(self, execution): + """Sets the execution of this IdentifierDto. + + + :param execution: The execution of this IdentifierDto. # noqa: E501 + :type: datetime + """ + if execution is None: + raise ValueError("Invalid value for `execution`, must not be `None`") # noqa: E501 + + self._execution = execution + @property def visibility(self): """Gets the visibility of this IdentifierDto. # noqa: E501 @@ -245,7 +324,7 @@ class IdentifierDto(object): """ if visibility is None: raise ValueError("Invalid value for `visibility`, must not be `None`") # noqa: E501 - allowed_values = ["VisibilityTypeDto.EVERYONE", "VisibilityTypeDto.TRUSTED", "VisibilityTypeDto.SELF"] # noqa: E501 + allowed_values = ["everyone", "trusted", "self"] # noqa: E501 if visibility not in allowed_values: raise ValueError( "Invalid value for `visibility` ({0}), must be one of {1}" # noqa: E501 @@ -275,6 +354,29 @@ class IdentifierDto(object): self._doi = doi + @property + def creator(self): + """Gets the creator of this IdentifierDto. # noqa: E501 + + + :return: The creator of this IdentifierDto. # noqa: E501 + :rtype: UserDto + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this IdentifierDto. + + + :param creator: The creator of this IdentifierDto. # noqa: E501 + :type: UserDto + """ + if creator is None: + raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + + self._creator = creator + @property def creators(self): """Gets the creators of this IdentifierDto. # noqa: E501 @@ -319,6 +421,119 @@ class IdentifierDto(object): self._created = created + @property + def query_normalized(self): + """Gets the query_normalized of this IdentifierDto. # noqa: E501 + + + :return: The query_normalized of this IdentifierDto. # noqa: E501 + :rtype: str + """ + return self._query_normalized + + @query_normalized.setter + def query_normalized(self, query_normalized): + """Sets the query_normalized of this IdentifierDto. + + + :param query_normalized: The query_normalized of this IdentifierDto. # noqa: E501 + :type: str + """ + if query_normalized is None: + raise ValueError("Invalid value for `query_normalized`, must not be `None`") # noqa: E501 + + self._query_normalized = query_normalized + + @property + def related(self): + """Gets the related of this IdentifierDto. # noqa: E501 + + + :return: The related of this IdentifierDto. # noqa: E501 + :rtype: list[RelatedIdentifierDto] + """ + return self._related + + @related.setter + def related(self, related): + """Sets the related of this IdentifierDto. + + + :param related: The related of this IdentifierDto. # noqa: E501 + :type: list[RelatedIdentifierDto] + """ + + self._related = related + + @property + def query_hash(self): + """Gets the query_hash of this IdentifierDto. # noqa: E501 + + + :return: The query_hash of this IdentifierDto. # noqa: E501 + :rtype: str + """ + return self._query_hash + + @query_hash.setter + def query_hash(self, query_hash): + """Sets the query_hash of this IdentifierDto. + + + :param query_hash: The query_hash of this IdentifierDto. # noqa: E501 + :type: str + """ + if query_hash is None: + raise ValueError("Invalid value for `query_hash`, must not be `None`") # noqa: E501 + + self._query_hash = query_hash + + @property + def result_hash(self): + """Gets the result_hash of this IdentifierDto. # noqa: E501 + + + :return: The result_hash of this IdentifierDto. # noqa: E501 + :rtype: str + """ + return self._result_hash + + @result_hash.setter + def result_hash(self, result_hash): + """Sets the result_hash of this IdentifierDto. + + + :param result_hash: The result_hash of this IdentifierDto. # noqa: E501 + :type: str + """ + if result_hash is None: + raise ValueError("Invalid value for `result_hash`, must not be `None`") # noqa: E501 + + self._result_hash = result_hash + + @property + def result_number(self): + """Gets the result_number of this IdentifierDto. # noqa: E501 + + + :return: The result_number of this IdentifierDto. # noqa: E501 + :rtype: int + """ + return self._result_number + + @result_number.setter + def result_number(self, result_number): + """Sets the result_number of this IdentifierDto. + + + :param result_number: The result_number of this IdentifierDto. # noqa: E501 + :type: int + """ + if result_number is None: + raise ValueError("Invalid value for `result_number`, must not be `None`") # noqa: E501 + + self._result_number = result_number + @property def publication_year(self): """Gets the publication_year of this IdentifierDto. # noqa: E501 diff --git a/.invenio/api_query/__init__.py b/.invenio/api_query/__init__.py index 675a17e9eea11a0965967d814834fdb7be6eb385..9a4636641eb566a3df6e570d90d93092ad56386c 100644 --- a/.invenio/api_query/__init__.py +++ b/.invenio/api_query/__init__.py @@ -19,6 +19,7 @@ from api_query.api.export_endpoint_api import ExportEndpointApi from api_query.api.query_endpoint_api import QueryEndpointApi from api_query.api.store_endpoint_api import StoreEndpointApi from api_query.api.table_data_endpoint_api import TableDataEndpointApi +from api_query.api.table_history_endpoint_api import TableHistoryEndpointApi # import ApiClient from api_query.api_client import ApiClient from api_query.configuration import Configuration @@ -34,10 +35,12 @@ from api_query.models.image_date_dto import ImageDateDto from api_query.models.image_dto import ImageDto from api_query.models.image_env_item_dto import ImageEnvItemDto from api_query.models.import_dto import ImportDto +from api_query.models.license_dto import LicenseDto from api_query.models.query_dto import QueryDto from api_query.models.query_result_dto import QueryResultDto from api_query.models.table_csv_delete_dto import TableCsvDeleteDto from api_query.models.table_csv_dto import TableCsvDto from api_query.models.table_csv_update_dto import TableCsvUpdateDto from api_query.models.table_dto import TableDto +from api_query.models.table_history_dto import TableHistoryDto from api_query.models.user_dto import UserDto diff --git a/.invenio/api_query/api/__init__.py b/.invenio/api_query/api/__init__.py index 474ede9529ec1647a549893ec6aa5d3dd3a0288e..b644b1438d02bcc510ef2c6c6cb3b93b50d5b76b 100644 --- a/.invenio/api_query/api/__init__.py +++ b/.invenio/api_query/api/__init__.py @@ -7,3 +7,4 @@ from api_query.api.export_endpoint_api import ExportEndpointApi from api_query.api.query_endpoint_api import QueryEndpointApi from api_query.api.store_endpoint_api import StoreEndpointApi from api_query.api.table_data_endpoint_api import TableDataEndpointApi +from api_query.api.table_history_endpoint_api import TableHistoryEndpointApi diff --git a/.invenio/api_query/api/export_endpoint_api.py b/.invenio/api_query/api/export_endpoint_api.py index 0e68ca31d6597ac27896e38f2ae5284c6649b6f0..6f67efb590901b2a7b7df3225614dbadb41a345b 100644 --- a/.invenio/api_query/api/export_endpoint_api.py +++ b/.invenio/api_query/api/export_endpoint_api.py @@ -127,7 +127,7 @@ class ExportEndpointApi(object): ['*/*']) # noqa: E501 # Authentication setting - auth_settings = [] # noqa: E501 + auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( '/api/container/{id}/database/{databaseId}/table/{tableId}/export', 'GET', diff --git a/.invenio/api_query/api/query_endpoint_api.py b/.invenio/api_query/api/query_endpoint_api.py index 3c1160f82146a608655304b115c3c193ecb16175..74bda079d95417f5be1f97e03ef2500bb04ce6ca 100644 --- a/.invenio/api_query/api/query_endpoint_api.py +++ b/.invenio/api_query/api/query_endpoint_api.py @@ -244,7 +244,7 @@ class QueryEndpointApi(object): ['*/*']) # noqa: E501 # Authentication setting - auth_settings = [] # noqa: E501 + auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( '/api/container/{id}/database/{databaseId}/query/{queryId}/export', 'GET', @@ -361,7 +361,7 @@ class QueryEndpointApi(object): ['*/*']) # noqa: E501 # Authentication setting - auth_settings = ['bearerAuth'] # noqa: E501 + auth_settings = [] # noqa: E501 return self.api_client.call_api( '/api/container/{id}/database/{databaseId}/query/{queryId}', 'PUT', diff --git a/.invenio/api_query/api/store_endpoint_api.py b/.invenio/api_query/api/store_endpoint_api.py index ac8bc391ac5366bff2d19846c51b469fa842fe4e..944e673ef29a78e77e5d10fe9841fc9e7f44e90c 100644 --- a/.invenio/api_query/api/store_endpoint_api.py +++ b/.invenio/api_query/api/store_endpoint_api.py @@ -123,7 +123,7 @@ class StoreEndpointApi(object): ['*/*']) # noqa: E501 # Authentication setting - auth_settings = [] # noqa: E501 + auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( '/api/container/{id}/database/{databaseId}/query/{queryId}', 'GET', @@ -224,7 +224,7 @@ class StoreEndpointApi(object): ['*/*']) # noqa: E501 # Authentication setting - auth_settings = [] # noqa: E501 + auth_settings = ['bearerAuth'] # noqa: E501 return self.api_client.call_api( '/api/container/{id}/database/{databaseId}/query', 'GET', diff --git a/.invenio/api_query/api/table_data_endpoint_api.py b/.invenio/api_query/api/table_data_endpoint_api.py index 34b6434bf0480fb38772c7920fab94c0754393de..a0717e8c4242461be2c7ee4646711380a862e5a9 100644 --- a/.invenio/api_query/api/table_data_endpoint_api.py +++ b/.invenio/api_query/api/table_data_endpoint_api.py @@ -153,12 +153,12 @@ class TableDataEndpointApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_all(self, id, database_id, table_id, **kwargs): # noqa: E501 + def get_all2(self, id, database_id, table_id, **kwargs): # noqa: E501 """Find data # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_all(id, database_id, table_id, async_req=True) + >>> thread = api.get_all2(id, database_id, table_id, async_req=True) >>> result = thread.get() :param async_req bool @@ -174,17 +174,17 @@ class TableDataEndpointApi(object): """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_all_with_http_info(id, database_id, table_id, **kwargs) # noqa: E501 + return self.get_all2_with_http_info(id, database_id, table_id, **kwargs) # noqa: E501 else: - (data) = self.get_all_with_http_info(id, database_id, table_id, **kwargs) # noqa: E501 + (data) = self.get_all2_with_http_info(id, database_id, table_id, **kwargs) # noqa: E501 return data - def get_all_with_http_info(self, id, database_id, table_id, **kwargs): # noqa: E501 + def get_all2_with_http_info(self, id, database_id, table_id, **kwargs): # noqa: E501 """Find data # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_all_with_http_info(id, database_id, table_id, async_req=True) + >>> thread = api.get_all2_with_http_info(id, database_id, table_id, async_req=True) >>> result = thread.get() :param async_req bool @@ -210,22 +210,22 @@ class TableDataEndpointApi(object): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_all" % key + " to method get_all2" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id' is set if ('id' not in params or params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_all`") # noqa: E501 + raise ValueError("Missing the required parameter `id` when calling `get_all2`") # noqa: E501 # verify the required parameter 'database_id' is set if ('database_id' not in params or params['database_id'] is None): - raise ValueError("Missing the required parameter `database_id` when calling `get_all`") # noqa: E501 + raise ValueError("Missing the required parameter `database_id` when calling `get_all2`") # noqa: E501 # verify the required parameter 'table_id' is set if ('table_id' not in params or params['table_id'] is None): - raise ValueError("Missing the required parameter `table_id` when calling `get_all`") # noqa: E501 + raise ValueError("Missing the required parameter `table_id` when calling `get_all2`") # noqa: E501 collection_formats = {} @@ -274,12 +274,12 @@ class TableDataEndpointApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_all1(self, id, database_id, table_id, **kwargs): # noqa: E501 + def get_all3(self, id, database_id, table_id, **kwargs): # noqa: E501 """Find data # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_all1(id, database_id, table_id, async_req=True) + >>> thread = api.get_all3(id, database_id, table_id, async_req=True) >>> result = thread.get() :param async_req bool @@ -295,17 +295,17 @@ class TableDataEndpointApi(object): """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_all1_with_http_info(id, database_id, table_id, **kwargs) # noqa: E501 + return self.get_all3_with_http_info(id, database_id, table_id, **kwargs) # noqa: E501 else: - (data) = self.get_all1_with_http_info(id, database_id, table_id, **kwargs) # noqa: E501 + (data) = self.get_all3_with_http_info(id, database_id, table_id, **kwargs) # noqa: E501 return data - def get_all1_with_http_info(self, id, database_id, table_id, **kwargs): # noqa: E501 + def get_all3_with_http_info(self, id, database_id, table_id, **kwargs): # noqa: E501 """Find data # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_all1_with_http_info(id, database_id, table_id, async_req=True) + >>> thread = api.get_all3_with_http_info(id, database_id, table_id, async_req=True) >>> result = thread.get() :param async_req bool @@ -331,22 +331,22 @@ class TableDataEndpointApi(object): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method get_all1" % key + " to method get_all3" % key ) params[key] = val del params['kwargs'] # verify the required parameter 'id' is set if ('id' not in params or params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_all1`") # noqa: E501 + raise ValueError("Missing the required parameter `id` when calling `get_all3`") # noqa: E501 # verify the required parameter 'database_id' is set if ('database_id' not in params or params['database_id'] is None): - raise ValueError("Missing the required parameter `database_id` when calling `get_all1`") # noqa: E501 + raise ValueError("Missing the required parameter `database_id` when calling `get_all3`") # noqa: E501 # verify the required parameter 'table_id' is set if ('table_id' not in params or params['table_id'] is None): - raise ValueError("Missing the required parameter `table_id` when calling `get_all1`") # noqa: E501 + raise ValueError("Missing the required parameter `table_id` when calling `get_all3`") # noqa: E501 collection_formats = {} diff --git a/.invenio/api_query/models/__init__.py b/.invenio/api_query/models/__init__.py index 28e69e53e8c43a32727227c2672aee3f09210042..b0fb2f215ecc74d5a89f888c8b55732a85624eee 100644 --- a/.invenio/api_query/models/__init__.py +++ b/.invenio/api_query/models/__init__.py @@ -25,10 +25,12 @@ from api_query.models.image_date_dto import ImageDateDto from api_query.models.image_dto import ImageDto from api_query.models.image_env_item_dto import ImageEnvItemDto from api_query.models.import_dto import ImportDto +from api_query.models.license_dto import LicenseDto from api_query.models.query_dto import QueryDto from api_query.models.query_result_dto import QueryResultDto from api_query.models.table_csv_delete_dto import TableCsvDeleteDto from api_query.models.table_csv_dto import TableCsvDto from api_query.models.table_csv_update_dto import TableCsvUpdateDto from api_query.models.table_dto import TableDto +from api_query.models.table_history_dto import TableHistoryDto from api_query.models.user_dto import UserDto diff --git a/.invenio/api_query/models/database_dto.py b/.invenio/api_query/models/database_dto.py index 9d02abc65b7cca49fa47c624b76e6c9846059d58..0873e4fd0850bfb6fceea95d09f6d2e26dc8bf53 100644 --- a/.invenio/api_query/models/database_dto.py +++ b/.invenio/api_query/models/database_dto.py @@ -30,71 +30,97 @@ class DatabaseDto(object): swagger_types = { 'id': 'int', 'name': 'str', + 'exchange': 'str', + 'creator': 'UserDto', + 'subjects': 'list[str]', + 'language': 'str', + 'license': 'LicenseDto', 'description': 'str', 'publisher': 'str', - 'license': 'str', 'contact': 'UserDto', 'tables': 'list[TableDto]', - 'exchange': 'str', 'image': 'ImageDto', 'container': 'ContainerDto', 'created': 'datetime', 'deleted': 'datetime', - 'internal_name': 'str' + 'internal_name': 'str', + 'publication_year': 'int', + 'is_public': 'bool' } attribute_map = { 'id': 'id', 'name': 'name', + 'exchange': 'exchange', + 'creator': 'creator', + 'subjects': 'subjects', + 'language': 'language', + 'license': 'license', 'description': 'description', 'publisher': 'publisher', - 'license': 'license', 'contact': 'contact', 'tables': 'tables', - 'exchange': 'exchange', 'image': 'image', 'container': 'container', 'created': 'created', 'deleted': 'deleted', - 'internal_name': 'internal_name' + 'internal_name': 'internal_name', + 'publication_year': 'publication_year', + 'is_public': 'is_public' } - def __init__(self, id=None, name=None, description=None, publisher=None, license=None, contact=None, tables=None, exchange=None, image=None, container=None, created=None, deleted=None, internal_name=None): # noqa: E501 + def __init__(self, id=None, name=None, exchange=None, creator=None, subjects=None, language=None, license=None, description=None, publisher=None, contact=None, tables=None, image=None, container=None, created=None, deleted=None, internal_name=None, publication_year=None, is_public=None): # noqa: E501 """DatabaseDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None + self._exchange = None + self._creator = None + self._subjects = None + self._language = None + self._license = None self._description = None self._publisher = None - self._license = None self._contact = None self._tables = None - self._exchange = None self._image = None self._container = None self._created = None self._deleted = None self._internal_name = None + self._publication_year = None + self._is_public = None self.discriminator = None self.id = id self.name = name - self.description = description - if publisher is not None: - self.publisher = publisher + self.exchange = exchange + self.creator = creator + if subjects is not None: + self.subjects = subjects + if language is not None: + self.language = language if license is not None: self.license = license + if description is not None: + self.description = description + if publisher is not None: + self.publisher = publisher if contact is not None: self.contact = contact if tables is not None: self.tables = tables - self.exchange = exchange if image is not None: self.image = image if container is not None: self.container = container - self.created = created + if created is not None: + self.created = created if deleted is not None: self.deleted = deleted self.internal_name = internal_name + if publication_year is not None: + self.publication_year = publication_year + if is_public is not None: + self.is_public = is_public @property def id(self): @@ -143,48 +169,98 @@ class DatabaseDto(object): self._name = name @property - def description(self): - """Gets the description of this DatabaseDto. # noqa: E501 + def exchange(self): + """Gets the exchange of this DatabaseDto. # noqa: E501 - :return: The description of this DatabaseDto. # noqa: E501 + :return: The exchange of this DatabaseDto. # noqa: E501 :rtype: str """ - return self._description + return self._exchange - @description.setter - def description(self, description): - """Sets the description of this DatabaseDto. + @exchange.setter + def exchange(self, exchange): + """Sets the exchange of this DatabaseDto. - :param description: The description of this DatabaseDto. # noqa: E501 + :param exchange: The exchange of this DatabaseDto. # noqa: E501 :type: str """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 + if exchange is None: + raise ValueError("Invalid value for `exchange`, must not be `None`") # noqa: E501 - self._description = description + self._exchange = exchange @property - def publisher(self): - """Gets the publisher of this DatabaseDto. # noqa: E501 + def creator(self): + """Gets the creator of this DatabaseDto. # noqa: E501 - :return: The publisher of this DatabaseDto. # noqa: E501 + :return: The creator of this DatabaseDto. # noqa: E501 + :rtype: UserDto + """ + return self._creator + + @creator.setter + def creator(self, creator): + """Sets the creator of this DatabaseDto. + + + :param creator: The creator of this DatabaseDto. # noqa: E501 + :type: UserDto + """ + if creator is None: + raise ValueError("Invalid value for `creator`, must not be `None`") # noqa: E501 + + self._creator = creator + + @property + def subjects(self): + """Gets the subjects of this DatabaseDto. # noqa: E501 + + + :return: The subjects of this DatabaseDto. # noqa: E501 + :rtype: list[str] + """ + return self._subjects + + @subjects.setter + def subjects(self, subjects): + """Sets the subjects of this DatabaseDto. + + + :param subjects: The subjects of this DatabaseDto. # noqa: E501 + :type: list[str] + """ + + self._subjects = subjects + + @property + def language(self): + """Gets the language of this DatabaseDto. # noqa: E501 + + + :return: The language of this DatabaseDto. # noqa: E501 :rtype: str """ - return self._publisher + return self._language - @publisher.setter - def publisher(self, publisher): - """Sets the publisher of this DatabaseDto. + @language.setter + def language(self, language): + """Sets the language of this DatabaseDto. - :param publisher: The publisher of this DatabaseDto. # noqa: E501 + :param language: The language of this DatabaseDto. # noqa: E501 :type: str """ + allowed_values = ["ab", "aa", "af", "ak", "sq", "am", "ar", "an", "hy", "as", "av", "ae", "ay", "az", "bm", "ba", "eu", "be", "bn", "bh", "bi", "bs", "br", "bg", "my", "ca", "km", "ch", "ce", "ny", "zh", "cu", "cv", "kw", "co", "cr", "hr", "cs", "da", "dv", "nl", "dz", "en", "eo", "et", "ee", "fo", "fj", "fi", "fr", "ff", "gd", "gl", "lg", "ka", "de", "ki", "el", "kl", "gn", "gu", "ht", "ha", "he", "hz", "hi", "ho", "hu", "is", "io", "ig", "id", "ia", "ie", "iu", "ik", "ga", "it", "ja", "jv", "kn", "kr", "ks", "kk", "rw", "kv", "kg", "ko", "kj", "ku", "ky", "lo", "la", "lv", "lb", "li", "ln", "lt", "lu", "mk", "mg", "ms", "ml", "mt", "gv", "mi", "mr", "mh", "ro", "mn", "na", "nv", "nd", "ng", "ne", "se", "no", "nb", "nn", "ii", "oc", "oj", "or", "om", "os", "pi", "pa", "ps", "fa", "pl", "pt", "qu", "rm", "rn", "ru", "sm", "sg", "sa", "sc", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "nr", "es", "su", "sw", "ss", "sv", "tl", "ty", "tg", "ta", "tt", "te", "th", "bo", "ti", "to", "ts", "tn", "tr", "tk", "tw", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "cy", "fy", "wo", "xh", "yi", "yo", "za", "zu"] # noqa: E501 + if language not in allowed_values: + raise ValueError( + "Invalid value for `language` ({0}), must be one of {1}" # noqa: E501 + .format(language, allowed_values) + ) - self._publisher = publisher + self._language = language @property def license(self): @@ -192,7 +268,7 @@ class DatabaseDto(object): :return: The license of this DatabaseDto. # noqa: E501 - :rtype: str + :rtype: LicenseDto """ return self._license @@ -202,11 +278,53 @@ class DatabaseDto(object): :param license: The license of this DatabaseDto. # noqa: E501 - :type: str + :type: LicenseDto """ self._license = license + @property + def description(self): + """Gets the description of this DatabaseDto. # noqa: E501 + + + :return: The description of this DatabaseDto. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this DatabaseDto. + + + :param description: The description of this DatabaseDto. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def publisher(self): + """Gets the publisher of this DatabaseDto. # noqa: E501 + + + :return: The publisher of this DatabaseDto. # noqa: E501 + :rtype: str + """ + return self._publisher + + @publisher.setter + def publisher(self, publisher): + """Sets the publisher of this DatabaseDto. + + + :param publisher: The publisher of this DatabaseDto. # noqa: E501 + :type: str + """ + + self._publisher = publisher + @property def contact(self): """Gets the contact of this DatabaseDto. # noqa: E501 @@ -249,29 +367,6 @@ class DatabaseDto(object): self._tables = tables - @property - def exchange(self): - """Gets the exchange of this DatabaseDto. # noqa: E501 - - - :return: The exchange of this DatabaseDto. # noqa: E501 - :rtype: str - """ - return self._exchange - - @exchange.setter - def exchange(self, exchange): - """Sets the exchange of this DatabaseDto. - - - :param exchange: The exchange of this DatabaseDto. # noqa: E501 - :type: str - """ - if exchange is None: - raise ValueError("Invalid value for `exchange`, must not be `None`") # noqa: E501 - - self._exchange = exchange - @property def image(self): """Gets the image of this DatabaseDto. # noqa: E501 @@ -332,8 +427,6 @@ class DatabaseDto(object): :param created: The created of this DatabaseDto. # noqa: E501 :type: datetime """ - if created is None: - raise ValueError("Invalid value for `created`, must not be `None`") # noqa: E501 self._created = created @@ -381,6 +474,48 @@ class DatabaseDto(object): self._internal_name = internal_name + @property + def publication_year(self): + """Gets the publication_year of this DatabaseDto. # noqa: E501 + + + :return: The publication_year of this DatabaseDto. # noqa: E501 + :rtype: int + """ + return self._publication_year + + @publication_year.setter + def publication_year(self, publication_year): + """Sets the publication_year of this DatabaseDto. + + + :param publication_year: The publication_year of this DatabaseDto. # noqa: E501 + :type: int + """ + + self._publication_year = publication_year + + @property + def is_public(self): + """Gets the is_public of this DatabaseDto. # noqa: E501 + + + :return: The is_public of this DatabaseDto. # noqa: E501 + :rtype: bool + """ + return self._is_public + + @is_public.setter + def is_public(self, is_public): + """Sets the is_public of this DatabaseDto. + + + :param is_public: The is_public of this DatabaseDto. # noqa: E501 + :type: bool + """ + + self._is_public = is_public + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_query/models/import_dto.py b/.invenio/api_query/models/import_dto.py index 600eb2ac378048199a143055feaffdb1066e20ff..b6a90a4e1cdd6c20fe0c68f9340b0a025355eb03 100644 --- a/.invenio/api_query/models/import_dto.py +++ b/.invenio/api_query/models/import_dto.py @@ -28,18 +28,47 @@ class ImportDto(object): and the value is json key in definition. """ swagger_types = { - 'location': 'str' + 'location': 'str', + 'separator': 'str', + 'quote': 'str', + 'skip_lines': 'int', + 'false_element': 'str', + 'true_element': 'str', + 'null_element': 'str' } attribute_map = { - 'location': 'location' + 'location': 'location', + 'separator': 'separator', + 'quote': 'quote', + 'skip_lines': 'skip_lines', + 'false_element': 'false_element', + 'true_element': 'true_element', + 'null_element': 'null_element' } - def __init__(self, location=None): # noqa: E501 + def __init__(self, location=None, separator=None, quote=None, skip_lines=None, false_element=None, true_element=None, null_element=None): # noqa: E501 """ImportDto - a model defined in Swagger""" # noqa: E501 self._location = None + self._separator = None + self._quote = None + self._skip_lines = None + self._false_element = None + self._true_element = None + self._null_element = None self.discriminator = None self.location = location + self.separator = separator + if quote is not None: + self.quote = quote + if skip_lines is not None: + self.skip_lines = skip_lines + if false_element is not None: + self.false_element = false_element + if true_element is not None: + self.true_element = true_element + if null_element is not None: + self.null_element = null_element @property def location(self): @@ -64,6 +93,134 @@ class ImportDto(object): self._location = location + @property + def separator(self): + """Gets the separator of this ImportDto. # noqa: E501 + + + :return: The separator of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._separator + + @separator.setter + def separator(self, separator): + """Sets the separator of this ImportDto. + + + :param separator: The separator of this ImportDto. # noqa: E501 + :type: str + """ + if separator is None: + raise ValueError("Invalid value for `separator`, must not be `None`") # noqa: E501 + + self._separator = separator + + @property + def quote(self): + """Gets the quote of this ImportDto. # noqa: E501 + + + :return: The quote of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._quote + + @quote.setter + def quote(self, quote): + """Sets the quote of this ImportDto. + + + :param quote: The quote of this ImportDto. # noqa: E501 + :type: str + """ + + self._quote = quote + + @property + def skip_lines(self): + """Gets the skip_lines of this ImportDto. # noqa: E501 + + + :return: The skip_lines of this ImportDto. # noqa: E501 + :rtype: int + """ + return self._skip_lines + + @skip_lines.setter + def skip_lines(self, skip_lines): + """Sets the skip_lines of this ImportDto. + + + :param skip_lines: The skip_lines of this ImportDto. # noqa: E501 + :type: int + """ + + self._skip_lines = skip_lines + + @property + def false_element(self): + """Gets the false_element of this ImportDto. # noqa: E501 + + + :return: The false_element of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._false_element + + @false_element.setter + def false_element(self, false_element): + """Sets the false_element of this ImportDto. + + + :param false_element: The false_element of this ImportDto. # noqa: E501 + :type: str + """ + + self._false_element = false_element + + @property + def true_element(self): + """Gets the true_element of this ImportDto. # noqa: E501 + + + :return: The true_element of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._true_element + + @true_element.setter + def true_element(self, true_element): + """Sets the true_element of this ImportDto. + + + :param true_element: The true_element of this ImportDto. # noqa: E501 + :type: str + """ + + self._true_element = true_element + + @property + def null_element(self): + """Gets the null_element of this ImportDto. # noqa: E501 + + + :return: The null_element of this ImportDto. # noqa: E501 + :rtype: str + """ + return self._null_element + + @null_element.setter + def null_element(self, null_element): + """Sets the null_element of this ImportDto. + + + :param null_element: The null_element of this ImportDto. # noqa: E501 + :type: str + """ + + self._null_element = null_element + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_query/models/table_dto.py b/.invenio/api_query/models/table_dto.py index 34341e20aa7b07aee059abd9a748dd23918dcde8..b5828f5a522e2cbf96882b4a65ceb6f767b5a837 100644 --- a/.invenio/api_query/models/table_dto.py +++ b/.invenio/api_query/models/table_dto.py @@ -32,15 +32,9 @@ class TableDto(object): 'name': 'str', 'topic': 'str', 'description': 'str', - 'separator': 'str', - 'quote': 'str', 'created': 'datetime', 'columns': 'list[ColumnDto]', - 'internal_name': 'str', - 'null_element': 'str', - 'skip_lines': 'int', - 'true_element': 'str', - 'false_element': 'str' + 'internal_name': 'str' } attribute_map = { @@ -48,50 +42,29 @@ class TableDto(object): 'name': 'name', 'topic': 'topic', 'description': 'description', - 'separator': 'separator', - 'quote': 'quote', 'created': 'created', 'columns': 'columns', - 'internal_name': 'internal_name', - 'null_element': 'null_element', - 'skip_lines': 'skip_lines', - 'true_element': 'true_element', - 'false_element': 'false_element' + 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, topic=None, description=None, separator=None, quote=None, created=None, columns=None, internal_name=None, null_element=None, skip_lines=None, true_element=None, false_element=None): # noqa: E501 + def __init__(self, id=None, name=None, topic=None, description=None, created=None, columns=None, internal_name=None): # noqa: E501 """TableDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._topic = None self._description = None - self._separator = None - self._quote = None self._created = None self._columns = None self._internal_name = None - self._null_element = None - self._skip_lines = None - self._true_element = None - self._false_element = None self.discriminator = None self.id = id self.name = name self.topic = topic self.description = description - self.separator = separator - self.quote = quote if created is not None: self.created = created self.columns = columns self.internal_name = internal_name - self.null_element = null_element - if skip_lines is not None: - self.skip_lines = skip_lines - if true_element is not None: - self.true_element = true_element - if false_element is not None: - self.false_element = false_element @property def id(self): @@ -185,52 +158,6 @@ class TableDto(object): self._description = description - @property - def separator(self): - """Gets the separator of this TableDto. # noqa: E501 - - - :return: The separator of this TableDto. # noqa: E501 - :rtype: str - """ - return self._separator - - @separator.setter - def separator(self, separator): - """Sets the separator of this TableDto. - - - :param separator: The separator of this TableDto. # noqa: E501 - :type: str - """ - if separator is None: - raise ValueError("Invalid value for `separator`, must not be `None`") # noqa: E501 - - self._separator = separator - - @property - def quote(self): - """Gets the quote of this TableDto. # noqa: E501 - - - :return: The quote of this TableDto. # noqa: E501 - :rtype: str - """ - return self._quote - - @quote.setter - def quote(self, quote): - """Sets the quote of this TableDto. - - - :param quote: The quote of this TableDto. # noqa: E501 - :type: str - """ - if quote is None: - raise ValueError("Invalid value for `quote`, must not be `None`") # noqa: E501 - - self._quote = quote - @property def created(self): """Gets the created of this TableDto. # noqa: E501 @@ -298,92 +225,6 @@ class TableDto(object): self._internal_name = internal_name - @property - def null_element(self): - """Gets the null_element of this TableDto. # noqa: E501 - - - :return: The null_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._null_element - - @null_element.setter - def null_element(self, null_element): - """Sets the null_element of this TableDto. - - - :param null_element: The null_element of this TableDto. # noqa: E501 - :type: str - """ - if null_element is None: - raise ValueError("Invalid value for `null_element`, must not be `None`") # noqa: E501 - - self._null_element = null_element - - @property - def skip_lines(self): - """Gets the skip_lines of this TableDto. # noqa: E501 - - - :return: The skip_lines of this TableDto. # noqa: E501 - :rtype: int - """ - return self._skip_lines - - @skip_lines.setter - def skip_lines(self, skip_lines): - """Sets the skip_lines of this TableDto. - - - :param skip_lines: The skip_lines of this TableDto. # noqa: E501 - :type: int - """ - - self._skip_lines = skip_lines - - @property - def true_element(self): - """Gets the true_element of this TableDto. # noqa: E501 - - - :return: The true_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._true_element - - @true_element.setter - def true_element(self, true_element): - """Sets the true_element of this TableDto. - - - :param true_element: The true_element of this TableDto. # noqa: E501 - :type: str - """ - - self._true_element = true_element - - @property - def false_element(self): - """Gets the false_element of this TableDto. # noqa: E501 - - - :return: The false_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._false_element - - @false_element.setter - def false_element(self, false_element): - """Sets the false_element of this TableDto. - - - :param false_element: The false_element of this TableDto. # noqa: E501 - :type: str - """ - - self._false_element = false_element - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_query/models/user_dto.py b/.invenio/api_query/models/user_dto.py index a0090445928dde03bc819e60ec5babbd110e83a6..366f9ae0bf5e2c13d34194b28b38319e875e43e4 100644 --- a/.invenio/api_query/models/user_dto.py +++ b/.invenio/api_query/models/user_dto.py @@ -31,52 +31,51 @@ class UserDto(object): 'id': 'int', 'authorities': 'list[GrantedAuthorityDto]', 'username': 'str', - 'titles_before': 'str', - 'titles_after': 'str', 'firstname': 'str', 'lastname': 'str', 'containers': 'list[ContainerDto]', 'databases': 'list[ContainerDto]', 'identifiers': 'list[ContainerDto]', - 'email': 'str' + 'email': 'str', + 'titles_before': 'str', + 'titles_after': 'str', + 'email_verified': 'bool' } attribute_map = { 'id': 'id', 'authorities': 'authorities', 'username': 'username', - 'titles_before': 'titlesBefore', - 'titles_after': 'titlesAfter', 'firstname': 'firstname', 'lastname': 'lastname', 'containers': 'containers', 'databases': 'databases', 'identifiers': 'identifiers', - 'email': 'email' + 'email': 'email', + 'titles_before': 'titles_before', + 'titles_after': 'titles_after', + 'email_verified': 'email_verified' } - def __init__(self, id=None, authorities=None, username=None, titles_before=None, titles_after=None, firstname=None, lastname=None, containers=None, databases=None, identifiers=None, email=None): # noqa: E501 + def __init__(self, id=None, authorities=None, username=None, firstname=None, lastname=None, containers=None, databases=None, identifiers=None, email=None, titles_before=None, titles_after=None, email_verified=None): # noqa: E501 """UserDto - a model defined in Swagger""" # noqa: E501 self._id = None self._authorities = None self._username = None - self._titles_before = None - self._titles_after = None self._firstname = None self._lastname = None self._containers = None self._databases = None self._identifiers = None self._email = None + self._titles_before = None + self._titles_after = None + self._email_verified = None self.discriminator = None self.id = id if authorities is not None: self.authorities = authorities self.username = username - if titles_before is not None: - self.titles_before = titles_before - if titles_after is not None: - self.titles_after = titles_after if firstname is not None: self.firstname = firstname if lastname is not None: @@ -88,6 +87,12 @@ class UserDto(object): if identifiers is not None: self.identifiers = identifiers self.email = email + if titles_before is not None: + self.titles_before = titles_before + if titles_after is not None: + self.titles_after = titles_after + if email_verified is not None: + self.email_verified = email_verified @property def id(self): @@ -156,48 +161,6 @@ class UserDto(object): self._username = username - @property - def titles_before(self): - """Gets the titles_before of this UserDto. # noqa: E501 - - - :return: The titles_before of this UserDto. # noqa: E501 - :rtype: str - """ - return self._titles_before - - @titles_before.setter - def titles_before(self, titles_before): - """Sets the titles_before of this UserDto. - - - :param titles_before: The titles_before of this UserDto. # noqa: E501 - :type: str - """ - - self._titles_before = titles_before - - @property - def titles_after(self): - """Gets the titles_after of this UserDto. # noqa: E501 - - - :return: The titles_after of this UserDto. # noqa: E501 - :rtype: str - """ - return self._titles_after - - @titles_after.setter - def titles_after(self, titles_after): - """Sets the titles_after of this UserDto. - - - :param titles_after: The titles_after of this UserDto. # noqa: E501 - :type: str - """ - - self._titles_after = titles_after - @property def firstname(self): """Gets the firstname of this UserDto. # noqa: E501 @@ -326,6 +289,69 @@ class UserDto(object): self._email = email + @property + def titles_before(self): + """Gets the titles_before of this UserDto. # noqa: E501 + + + :return: The titles_before of this UserDto. # noqa: E501 + :rtype: str + """ + return self._titles_before + + @titles_before.setter + def titles_before(self, titles_before): + """Sets the titles_before of this UserDto. + + + :param titles_before: The titles_before of this UserDto. # noqa: E501 + :type: str + """ + + self._titles_before = titles_before + + @property + def titles_after(self): + """Gets the titles_after of this UserDto. # noqa: E501 + + + :return: The titles_after of this UserDto. # noqa: E501 + :rtype: str + """ + return self._titles_after + + @titles_after.setter + def titles_after(self, titles_after): + """Sets the titles_after of this UserDto. + + + :param titles_after: The titles_after of this UserDto. # noqa: E501 + :type: str + """ + + self._titles_after = titles_after + + @property + def email_verified(self): + """Gets the email_verified of this UserDto. # noqa: E501 + + + :return: The email_verified of this UserDto. # noqa: E501 + :rtype: bool + """ + return self._email_verified + + @email_verified.setter + def email_verified(self, email_verified): + """Sets the email_verified of this UserDto. + + + :param email_verified: The email_verified of this UserDto. # noqa: E501 + :type: bool + """ + + self._email_verified = email_verified + def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_table/models/column_create_dto.py b/.invenio/api_table/models/column_create_dto.py index aab3aaae97b3b8706198e30a7e718110e794fd49..62f379ee998a51f4a3a5fdc24d3d598d6513d948 100644 --- a/.invenio/api_table/models/column_create_dto.py +++ b/.invenio/api_table/models/column_create_dto.py @@ -35,8 +35,6 @@ class ColumnCreateDto(object): 'references': 'str', 'primary_key': 'bool', 'null_allowed': 'bool', - 'decimal_digits_before': 'int', - 'decimal_digits_after': 'int', 'check_expression': 'str', 'foreign_key': 'str', 'enum_values': 'list[str]' @@ -50,14 +48,12 @@ class ColumnCreateDto(object): 'references': 'references', 'primary_key': 'primary_key', 'null_allowed': 'null_allowed', - 'decimal_digits_before': 'decimal_digits_before', - 'decimal_digits_after': 'decimal_digits_after', 'check_expression': 'check_expression', 'foreign_key': 'foreign_key', 'enum_values': 'enum_values' } - def __init__(self, name=None, type=None, dfid=None, unique=None, references=None, primary_key=None, null_allowed=None, decimal_digits_before=None, decimal_digits_after=None, check_expression=None, foreign_key=None, enum_values=None): # noqa: E501 + def __init__(self, name=None, type=None, dfid=None, unique=None, references=None, primary_key=None, null_allowed=None, check_expression=None, foreign_key=None, enum_values=None): # noqa: E501 """ColumnCreateDto - a model defined in Swagger""" # noqa: E501 self._name = None self._type = None @@ -66,8 +62,6 @@ class ColumnCreateDto(object): self._references = None self._primary_key = None self._null_allowed = None - self._decimal_digits_before = None - self._decimal_digits_after = None self._check_expression = None self._foreign_key = None self._enum_values = None @@ -81,10 +75,6 @@ class ColumnCreateDto(object): self.references = references self.primary_key = primary_key self.null_allowed = null_allowed - if decimal_digits_before is not None: - self.decimal_digits_before = decimal_digits_before - if decimal_digits_after is not None: - self.decimal_digits_after = decimal_digits_after if check_expression is not None: self.check_expression = check_expression if foreign_key is not None: @@ -255,48 +245,6 @@ class ColumnCreateDto(object): self._null_allowed = null_allowed - @property - def decimal_digits_before(self): - """Gets the decimal_digits_before of this ColumnCreateDto. # noqa: E501 - - - :return: The decimal_digits_before of this ColumnCreateDto. # noqa: E501 - :rtype: int - """ - return self._decimal_digits_before - - @decimal_digits_before.setter - def decimal_digits_before(self, decimal_digits_before): - """Sets the decimal_digits_before of this ColumnCreateDto. - - - :param decimal_digits_before: The decimal_digits_before of this ColumnCreateDto. # noqa: E501 - :type: int - """ - - self._decimal_digits_before = decimal_digits_before - - @property - def decimal_digits_after(self): - """Gets the decimal_digits_after of this ColumnCreateDto. # noqa: E501 - - - :return: The decimal_digits_after of this ColumnCreateDto. # noqa: E501 - :rtype: int - """ - return self._decimal_digits_after - - @decimal_digits_after.setter - def decimal_digits_after(self, decimal_digits_after): - """Sets the decimal_digits_after of this ColumnCreateDto. - - - :param decimal_digits_after: The decimal_digits_after of this ColumnCreateDto. # noqa: E501 - :type: int - """ - - self._decimal_digits_after = decimal_digits_after - @property def check_expression(self): """Gets the check_expression of this ColumnCreateDto. # noqa: E501 diff --git a/.invenio/api_table/models/table_create_dto.py b/.invenio/api_table/models/table_create_dto.py index 7ad085b90ddd9e9addfad97b831399506606f5e3..b80fd32e1fc602b5834e167df02cf02a5dc12c3a 100644 --- a/.invenio/api_table/models/table_create_dto.py +++ b/.invenio/api_table/models/table_create_dto.py @@ -30,53 +30,24 @@ class TableCreateDto(object): swagger_types = { 'name': 'str', 'description': 'str', - 'separator': 'str', - 'quote': 'str', - 'columns': 'list[ColumnCreateDto]', - 'skip_lines': 'int', - 'false_element': 'str', - 'true_element': 'str', - 'null_element': 'str' + 'columns': 'list[ColumnCreateDto]' } attribute_map = { 'name': 'name', 'description': 'description', - 'separator': 'separator', - 'quote': 'quote', - 'columns': 'columns', - 'skip_lines': 'skip_lines', - 'false_element': 'false_element', - 'true_element': 'true_element', - 'null_element': 'null_element' + 'columns': 'columns' } - def __init__(self, name=None, description=None, separator=None, quote=None, columns=None, skip_lines=None, false_element=None, true_element=None, null_element=None): # noqa: E501 + def __init__(self, name=None, description=None, columns=None): # noqa: E501 """TableCreateDto - a model defined in Swagger""" # noqa: E501 self._name = None self._description = None - self._separator = None - self._quote = None self._columns = None - self._skip_lines = None - self._false_element = None - self._true_element = None - self._null_element = None self.discriminator = None self.name = name self.description = description - self.separator = separator - if quote is not None: - self.quote = quote self.columns = columns - if skip_lines is not None: - self.skip_lines = skip_lines - if false_element is not None: - self.false_element = false_element - if true_element is not None: - self.true_element = true_element - if null_element is not None: - self.null_element = null_element @property def name(self): @@ -124,50 +95,6 @@ class TableCreateDto(object): self._description = description - @property - def separator(self): - """Gets the separator of this TableCreateDto. # noqa: E501 - - - :return: The separator of this TableCreateDto. # noqa: E501 - :rtype: str - """ - return self._separator - - @separator.setter - def separator(self, separator): - """Sets the separator of this TableCreateDto. - - - :param separator: The separator of this TableCreateDto. # noqa: E501 - :type: str - """ - if separator is None: - raise ValueError("Invalid value for `separator`, must not be `None`") # noqa: E501 - - self._separator = separator - - @property - def quote(self): - """Gets the quote of this TableCreateDto. # noqa: E501 - - - :return: The quote of this TableCreateDto. # noqa: E501 - :rtype: str - """ - return self._quote - - @quote.setter - def quote(self, quote): - """Sets the quote of this TableCreateDto. - - - :param quote: The quote of this TableCreateDto. # noqa: E501 - :type: str - """ - - self._quote = quote - @property def columns(self): """Gets the columns of this TableCreateDto. # noqa: E501 @@ -191,90 +118,6 @@ class TableCreateDto(object): self._columns = columns - @property - def skip_lines(self): - """Gets the skip_lines of this TableCreateDto. # noqa: E501 - - - :return: The skip_lines of this TableCreateDto. # noqa: E501 - :rtype: int - """ - return self._skip_lines - - @skip_lines.setter - def skip_lines(self, skip_lines): - """Sets the skip_lines of this TableCreateDto. - - - :param skip_lines: The skip_lines of this TableCreateDto. # noqa: E501 - :type: int - """ - - self._skip_lines = skip_lines - - @property - def false_element(self): - """Gets the false_element of this TableCreateDto. # noqa: E501 - - - :return: The false_element of this TableCreateDto. # noqa: E501 - :rtype: str - """ - return self._false_element - - @false_element.setter - def false_element(self, false_element): - """Sets the false_element of this TableCreateDto. - - - :param false_element: The false_element of this TableCreateDto. # noqa: E501 - :type: str - """ - - self._false_element = false_element - - @property - def true_element(self): - """Gets the true_element of this TableCreateDto. # noqa: E501 - - - :return: The true_element of this TableCreateDto. # noqa: E501 - :rtype: str - """ - return self._true_element - - @true_element.setter - def true_element(self, true_element): - """Sets the true_element of this TableCreateDto. - - - :param true_element: The true_element of this TableCreateDto. # noqa: E501 - :type: str - """ - - self._true_element = true_element - - @property - def null_element(self): - """Gets the null_element of this TableCreateDto. # noqa: E501 - - - :return: The null_element of this TableCreateDto. # noqa: E501 - :rtype: str - """ - return self._null_element - - @null_element.setter - def null_element(self, null_element): - """Sets the null_element of this TableCreateDto. - - - :param null_element: The null_element of this TableCreateDto. # noqa: E501 - :type: str - """ - - self._null_element = null_element - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/api_table/models/table_dto.py b/.invenio/api_table/models/table_dto.py index 8ed58647b484f86cf7816d59385f35c0202fbd66..f5394c29378cc572a4da6b387cd2b2cf88afcc2a 100644 --- a/.invenio/api_table/models/table_dto.py +++ b/.invenio/api_table/models/table_dto.py @@ -32,15 +32,9 @@ class TableDto(object): 'name': 'str', 'topic': 'str', 'description': 'str', - 'separator': 'str', - 'quote': 'str', 'created': 'datetime', 'columns': 'list[ColumnDto]', - 'internal_name': 'str', - 'null_element': 'str', - 'skip_lines': 'int', - 'true_element': 'str', - 'false_element': 'str' + 'internal_name': 'str' } attribute_map = { @@ -48,50 +42,29 @@ class TableDto(object): 'name': 'name', 'topic': 'topic', 'description': 'description', - 'separator': 'separator', - 'quote': 'quote', 'created': 'created', 'columns': 'columns', - 'internal_name': 'internal_name', - 'null_element': 'null_element', - 'skip_lines': 'skip_lines', - 'true_element': 'true_element', - 'false_element': 'false_element' + 'internal_name': 'internal_name' } - def __init__(self, id=None, name=None, topic=None, description=None, separator=None, quote=None, created=None, columns=None, internal_name=None, null_element=None, skip_lines=None, true_element=None, false_element=None): # noqa: E501 + def __init__(self, id=None, name=None, topic=None, description=None, created=None, columns=None, internal_name=None): # noqa: E501 """TableDto - a model defined in Swagger""" # noqa: E501 self._id = None self._name = None self._topic = None self._description = None - self._separator = None - self._quote = None self._created = None self._columns = None self._internal_name = None - self._null_element = None - self._skip_lines = None - self._true_element = None - self._false_element = None self.discriminator = None self.id = id self.name = name self.topic = topic self.description = description - self.separator = separator - self.quote = quote if created is not None: self.created = created self.columns = columns self.internal_name = internal_name - self.null_element = null_element - if skip_lines is not None: - self.skip_lines = skip_lines - if true_element is not None: - self.true_element = true_element - if false_element is not None: - self.false_element = false_element @property def id(self): @@ -185,52 +158,6 @@ class TableDto(object): self._description = description - @property - def separator(self): - """Gets the separator of this TableDto. # noqa: E501 - - - :return: The separator of this TableDto. # noqa: E501 - :rtype: str - """ - return self._separator - - @separator.setter - def separator(self, separator): - """Sets the separator of this TableDto. - - - :param separator: The separator of this TableDto. # noqa: E501 - :type: str - """ - if separator is None: - raise ValueError("Invalid value for `separator`, must not be `None`") # noqa: E501 - - self._separator = separator - - @property - def quote(self): - """Gets the quote of this TableDto. # noqa: E501 - - - :return: The quote of this TableDto. # noqa: E501 - :rtype: str - """ - return self._quote - - @quote.setter - def quote(self, quote): - """Sets the quote of this TableDto. - - - :param quote: The quote of this TableDto. # noqa: E501 - :type: str - """ - if quote is None: - raise ValueError("Invalid value for `quote`, must not be `None`") # noqa: E501 - - self._quote = quote - @property def created(self): """Gets the created of this TableDto. # noqa: E501 @@ -298,92 +225,6 @@ class TableDto(object): self._internal_name = internal_name - @property - def null_element(self): - """Gets the null_element of this TableDto. # noqa: E501 - - - :return: The null_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._null_element - - @null_element.setter - def null_element(self, null_element): - """Sets the null_element of this TableDto. - - - :param null_element: The null_element of this TableDto. # noqa: E501 - :type: str - """ - if null_element is None: - raise ValueError("Invalid value for `null_element`, must not be `None`") # noqa: E501 - - self._null_element = null_element - - @property - def skip_lines(self): - """Gets the skip_lines of this TableDto. # noqa: E501 - - - :return: The skip_lines of this TableDto. # noqa: E501 - :rtype: int - """ - return self._skip_lines - - @skip_lines.setter - def skip_lines(self, skip_lines): - """Sets the skip_lines of this TableDto. - - - :param skip_lines: The skip_lines of this TableDto. # noqa: E501 - :type: int - """ - - self._skip_lines = skip_lines - - @property - def true_element(self): - """Gets the true_element of this TableDto. # noqa: E501 - - - :return: The true_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._true_element - - @true_element.setter - def true_element(self, true_element): - """Sets the true_element of this TableDto. - - - :param true_element: The true_element of this TableDto. # noqa: E501 - :type: str - """ - - self._true_element = true_element - - @property - def false_element(self): - """Gets the false_element of this TableDto. # noqa: E501 - - - :return: The false_element of this TableDto. # noqa: E501 - :rtype: str - """ - return self._false_element - - @false_element.setter - def false_element(self, false_element): - """Sets the false_element of this TableDto. - - - :param false_element: The false_element of this TableDto. # noqa: E501 - :type: str - """ - - self._false_element = false_element - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/.invenio/audio/colive.0044_20200518133554_1_m4a_1.wav b/.invenio/audio/colive.0044_20200518133554_1_m4a_1.wav deleted file mode 100644 index e610ec048ebd07558035c11aa4f6a15750bf5ec1..0000000000000000000000000000000000000000 Binary files a/.invenio/audio/colive.0044_20200518133554_1_m4a_1.wav and /dev/null differ diff --git a/.invenio/audio/colive.0044_20200518133554_2_m4a_1.wav b/.invenio/audio/colive.0044_20200518133554_2_m4a_1.wav deleted file mode 100644 index 241d9f1448d200ea46281009707c67e7b12be67f..0000000000000000000000000000000000000000 Binary files a/.invenio/audio/colive.0044_20200518133554_2_m4a_1.wav and /dev/null differ diff --git a/.invenio/audio/colive.0066_20200611134530_1_m4a_0.wav b/.invenio/audio/colive.0066_20200611134530_1_m4a_0.wav deleted file mode 100644 index 7bcbae8524a81f0ffd7c90f6f382c5514310c3ea..0000000000000000000000000000000000000000 Binary files a/.invenio/audio/colive.0066_20200611134530_1_m4a_0.wav and /dev/null differ diff --git a/.invenio/audio/colive.0066_20200611134530_2_m4a_0.wav b/.invenio/audio/colive.0066_20200611134530_2_m4a_0.wav deleted file mode 100644 index dbd04ab7399c7ac5c445149ded7e1841eb18b624..0000000000000000000000000000000000000000 Binary files a/.invenio/audio/colive.0066_20200611134530_2_m4a_0.wav and /dev/null differ diff --git a/.invenio/audio/colive.0066_20200612072315_1_m4a_0.wav b/.invenio/audio/colive.0066_20200612072315_1_m4a_0.wav deleted file mode 100644 index 8ae74f8e40aa3e78ec7de9f7298e019a947a3ef5..0000000000000000000000000000000000000000 Binary files a/.invenio/audio/colive.0066_20200612072315_1_m4a_0.wav and /dev/null differ diff --git a/.invenio/dev.py b/.invenio/dev.py index 4bcafc47f9332e3404ac212203af49559d0b3922..69b23ddeec321ec9ca35e7db9b56b8ee5681452c 100755 --- a/.invenio/dev.py +++ b/.invenio/dev.py @@ -1,72 +1,43 @@ -#!/usr/bin/env python3 import os.path -from os import listdir -from os.path import isfile, join -from api_document.api.document_endpoint_api import DocumentEndpointApi -from api_document.api.file_endpoint_api import FileEndpointApi +import uuid +import time +import re +import csv +import requests as rq from api_authentication.api.authentication_endpoint_api import AuthenticationEndpointApi +from api_authentication.api.user_endpoint_api import UserEndpointApi +from api_container.api.container_endpoint_api import ContainerEndpointApi +from api_database.api.container_database_endpoint_api import ContainerDatabaseEndpointApi +from api_table.api.table_endpoint_api import TableEndpointApi authentication = AuthenticationEndpointApi() -document = DocumentEndpointApi() -file = FileEndpointApi() +user = UserEndpointApi() +container = ContainerEndpointApi() +database = ContainerDatabaseEndpointApi() +table = TableEndpointApi() -response = authentication.authenticate_user1({ - "username": "user", - "password": "user" -}) -headers = {"Authorization": "Bearer " + response.token} -document.api_client.default_headers = headers -file.api_client.default_headers = headers +url = "https://test.researchdata.tuwien.ac.at/records/vqpbr-5b889" -# Create document -response = document.create({ - "access": { - "record": "public", - "files": "public" - }, - "files": { - "enabled": True - }, - "metadata": { - "creators": [ - { - "affiliations": [ - { - "name": "TU Wien" - } - ], - "person_or_org": { - "type": "personal", - "name": "M., Weise", - "identifiers": [ - { - "scheme": "orcid", - "identifier": "0000-0003-4216-302X" - } - ], - "given_name": "Martin", - "family_name": "Weise" - } - } - ], - "title": "Jupyter Notebook Test", - "resource_type": { - "id": "other" - }, - "publication_date": "2022-06-28" - } -}) -document_id = response.id -print(document_id) +host = re.findall("^https?:\/\/([a-z0-9\.]+)", url)[0] +id = re.findall("/([a-z0-9-]+)$", url)[0] -# Upload files -files = [f for f in listdir("./audio") if isfile(join("./audio", f))] -for f in files: - print("... upload file", "/tmp/" + f) - response = file.upload_file({ - "location": os.path.curdir + "/tmp/" + f - }, document_id) +response = rq.get("https://" + host + "/api/records/" + id + "/files") +record = response.json() -# Publish -response = document.publish(document_id) -print(response) +for file in record["entries"]: + print("... save file contents from", file["links"]["content"]) + wav = rq.get(file["links"]["content"]) + filename = "/tmp/" + file["key"] + open(filename, "wb").write(wav.content) + print("... file saved in", filename) + audio = "http://localhost:8000/v1/audio" + with open(filename, "rb") as f: + data = f.read() + print("... feature extract to", audio) + res = rq.post(audio, data=data, headers={"Content-Type": "audio/wav"}) + print("... extracted", res.json()) + payload = [] + for part in res.json()["track"]["parts"]: + payload.append(part) + print("... payload", payload) +print("Finished.") \ No newline at end of file diff --git a/.invenio/feature_extract.ipynb b/.invenio/feature_extract.ipynb index 3266f8abdd40d405007ec501b052f3e66bafd58c..a481ea463c8a4b089147c528f24377fb584c2d2b 100644 --- a/.invenio/feature_extract.ipynb +++ b/.invenio/feature_extract.ipynb @@ -26,292 +26,650 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 119, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [], "source": [ - "import os.path\n", "import uuid\n", "import time\n", "import re\n", - "import csv\n", "import requests as rq\n", "from api_authentication.api.authentication_endpoint_api import AuthenticationEndpointApi\n", "from api_authentication.api.user_endpoint_api import UserEndpointApi\n", "from api_container.api.container_endpoint_api import ContainerEndpointApi\n", "from api_database.api.container_database_endpoint_api import ContainerDatabaseEndpointApi\n", "from api_table.api.table_endpoint_api import TableEndpointApi\n", + "from api_query.api.table_data_endpoint_api import TableDataEndpointApi\n", + "from api_query.api.query_endpoint_api import QueryEndpointApi\n", + "from api_identifier.api.identifier_endpoint_api import IdentifierEndpointApi\n", "\n", "authentication = AuthenticationEndpointApi()\n", "user = UserEndpointApi()\n", "container = ContainerEndpointApi()\n", "database = ContainerDatabaseEndpointApi()\n", "table = TableEndpointApi()\n", + "query = QueryEndpointApi()\n", + "data = TableDataEndpointApi()\n", + "identifier = IdentifierEndpointApi()\n", "\n", - "doi = \"10.5281/zenodo.5649276\"\n", - "email = \"some@example.com\"" - ], + "url = \"https://test.researchdata.tuwien.ac.at/records/vqpbr-5b889\"\n", + "audio = \"http://localhost:8000/v1/audio\"" + ] + }, + { + "cell_type": "code", + "execution_count": 120, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } - }, - { - "cell_type": "markdown", + }, + "outputs": [], "source": [ - " 9. Download wav\n", - "\n", - "Resolve the DOI to URI" - ], - "metadata": { - "collapsed": false - } + "response = authentication.authenticate_user1({\n", + " \"username\": \"user\",\n", + " \"password\": \"user\"\n", + "})\n", + "user_id = response.id\n", + "token = response.token\n", + "container.api_client.default_headers = {\"Authorization\": \"Bearer \" + token}\n", + "database.api_client.default_headers = {\"Authorization\": \"Bearer \" + token}\n", + "table.api_client.default_headers = {\"Authorization\": \"Bearer \" + token}\n", + "data.api_client.default_headers = {\"Authorization\": \"Bearer \" + token}\n", + "query.api_client.default_headers = {\"Authorization\": \"Bearer \" + token}\n", + "identifier.api_client.default_headers = {\"Authorization\": \"Bearer \" + token}\n", + "user.api_client.default_headers = {\"Authorization\": \"Bearer \" + token}" + ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 121, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Resolved DOI to zenodo.org and record id 5649276\n" + "{'authorities': [{'authority': 'ROLE_RESEARCHER'}],\n", + " 'containers': None,\n", + " 'databases': None,\n", + " 'email': 'martin.weise@tuwien.ac.at',\n", + " 'email_verified': False,\n", + " 'firstname': 'Martin',\n", + " 'id': 2,\n", + " 'identifiers': None,\n", + " 'lastname': 'Weise',\n", + " 'titles_after': None,\n", + " 'titles_before': 'DI',\n", + " 'username': 'user'}\n" ] } ], "source": [ - "response = rq.get(\"https://doi.org/\" + doi)\n", - "id = re.findall(\"/([a-z0-9-]+)$\", response.url)[0]\n", - "host = re.findall(\"^https?:\\/\\/([a-z0-9]+\\.[a-z]+)\", response.url)[0]\n", - "print(\"Resolved DOI to\", host, \"and record id\", id)" - ], + "response = user.update({\n", + " \"firstname\": \"Martin\",\n", + " \"lastname\": \"Weise\",\n", + " \"titles_before\": \"DI\"\n", + "}, user_id)\n", + "print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": 122, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } - }, - { - "cell_type": "markdown", - "source": [ - "2. Perform feature extraction" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 3, + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "... feature extract from https://zenodo.org/api/files/22d69a63-2aff-47ae-b818-be78a23e9889/colive.0044_20200518133554_1_m4a_1.wav\n", - "... feature extract from https://zenodo.org/api/files/22d69a63-2aff-47ae-b818-be78a23e9889/colive.0044_20200518133554_2_m4a_1.wav\n", - "... feature extract from https://zenodo.org/api/files/22d69a63-2aff-47ae-b818-be78a23e9889/colive.0066_20200611134530_1_m4a_0.wav\n", - "... feature extract from https://zenodo.org/api/files/22d69a63-2aff-47ae-b818-be78a23e9889/colive.0066_20200611134530_2_m4a_0.wav\n", - "... feature extract from https://zenodo.org/api/files/22d69a63-2aff-47ae-b818-be78a23e9889/colive.0066_20200612072315_1_m4a_0.wav\n", - "... feature extract from https://zenodo.org/api/files/22d69a63-2aff-47ae-b818-be78a23e9889/colive.0066_20200612072315_2_m4a_0.wav\n", - "Generated a feature .csv in your home directory\n" + "{'created': datetime.datetime(2022, 7, 8, 20, 51, 6),\n", + " 'creator': {'authorities': None,\n", + " 'containers': None,\n", + " 'databases': None,\n", + " 'email': 'martin.weise@tuwien.ac.at',\n", + " 'email_verified': False,\n", + " 'firstname': 'Martin',\n", + " 'id': 2,\n", + " 'identifiers': None,\n", + " 'lastname': 'Weise',\n", + " 'titles_after': None,\n", + " 'titles_before': 'DI',\n", + " 'username': 'user'},\n", + " 'hash': '747d7c751b7e297c9b356114b58f4eacb17ad0ed25627957d685adb6adcbae0e',\n", + " 'id': 1,\n", + " 'internal_name': 'fda-userdb-ethmusmir-afe3c41a-feff-11ec-8f21-64bc58900b78',\n", + " 'is_public': None,\n", + " 'name': 'ethmusmir afe3c41a-feff-11ec-8f21-64bc58900b78'}\n" ] } ], "source": [ - "response = rq.get(\"https://\" + host + \"/api/records/\" + id)\n", - "record = response.json()\n", - "\n", - "i = 0\n", - "with open(os.path.expanduser(\"~/features.csv\"), \"w\") as f:\n", - " writer = csv.writer(f)\n", - " writer.writerow([\"key\", \"size\", \"link\"])\n", - " for file in record[\"files\"]:\n", - " rq.get(file[\"links\"][\"self\"])\n", - " print(\"... feature extract from\", file[\"links\"][\"self\"])\n", - " writer.writerow([file[\"key\"], file[\"size\"], file[\"links\"][\"self\"]])\n", - " i += 1\n", - " if i > 5:\n", - " break\n", - "print(\"Generated a feature .csv in your home directory\")" - ], + "response = container.create1({\n", + " \"name\": \"ethmusmir \" + str(uuid.uuid1()),\n", + " \"repository\": \"mariadb\",\n", + " \"tag\": \"10.5\"\n", + "})\n", + "container_id = response.id\n", + "print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": 123, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } - }, - { - "cell_type": "markdown", - "source": [ - "3. Obtain an authentication token" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'created': datetime.datetime(2022, 7, 8, 20, 51, 6),\n", + " 'creator': {'authorities': None,\n", + " 'containers': None,\n", + " 'databases': None,\n", + " 'email': 'martin.weise@tuwien.ac.at',\n", + " 'email_verified': False,\n", + " 'firstname': 'Martin',\n", + " 'id': 2,\n", + " 'identifiers': None,\n", + " 'lastname': 'Weise',\n", + " 'titles_after': None,\n", + " 'titles_before': 'DI',\n", + " 'username': 'user'},\n", + " 'hash': '747d7c751b7e297c9b356114b58f4eacb17ad0ed25627957d685adb6adcbae0e',\n", + " 'id': 1,\n", + " 'internal_name': 'fda-userdb-ethmusmir-afe3c41a-feff-11ec-8f21-64bc58900b78',\n", + " 'is_public': None,\n", + " 'name': 'ethmusmir afe3c41a-feff-11ec-8f21-64bc58900b78'}\n" + ] + } ], - "metadata": { - "collapsed": false - } + "source": [ + "response = container.modify({\n", + " \"action\": \"start\"\n", + "}, container_id)\n", + "time.sleep(5)\n", + "print(response)" + ] }, { "cell_type": "code", - "execution_count": 4, - "outputs": [], - "source": [ - "response = authentication.authenticate_user1({\n", - " \"username\": \"user\",\n", - " \"password\": \"user\"\n", - "})\n", - "container.api_client.default_headers = {\"Authorization\": \"Bearer \" + response.token}\n", - "database.api_client.default_headers = {\"Authorization\": \"Bearer \" + response.token}\n", - "table.api_client.default_headers = {\"Authorization\": \"Bearer \" + response.token}" - ], + "execution_count": 124, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } - }, - { - "cell_type": "markdown", - "source": [ - "4. Create a mariadb container" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'contact': None,\n", + " 'container': {'created': datetime.datetime(2022, 7, 8, 20, 51, 6),\n", + " 'databases': None,\n", + " 'hash': '747d7c751b7e297c9b356114b58f4eacb17ad0ed25627957d685adb6adcbae0e',\n", + " 'id': 1,\n", + " 'image': {'compiled': None,\n", + " 'date_formats': [{'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%Y-%c-%d',\n", + " 'example': '2022-01-30',\n", + " 'has_time': False,\n", + " 'id': 1,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%d.%c.%Y',\n", + " 'example': '30.01.2022',\n", + " 'has_time': False,\n", + " 'id': 2,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%d.%c.%y',\n", + " 'example': '30.01.22',\n", + " 'has_time': False,\n", + " 'id': 3,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%c/%d/%Y',\n", + " 'example': '01/30/2022',\n", + " 'has_time': False,\n", + " 'id': 4,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%c/%d/%y',\n", + " 'example': '01/30/22',\n", + " 'has_time': False,\n", + " 'id': 5,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%Y-%c-%d '\n", + " '%H:%i:%S.%f',\n", + " 'example': '2022-01-30 13:44:25.0',\n", + " 'has_time': True,\n", + " 'id': 6,\n", + " 'unix_format': 'yyyy-MM-dd '\n", + " 'HH:mm:ss.SSSSSS'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%Y-%c-%d '\n", + " '%H:%i:%S',\n", + " 'example': '2022-01-30 13:44:25',\n", + " 'has_time': True,\n", + " 'id': 7,\n", + " 'unix_format': 'yyyy-MM-dd '\n", + " 'HH:mm:ss'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%d.%c.%Y '\n", + " '%H:%i:%S',\n", + " 'example': '30.01.2022 13:44:25',\n", + " 'has_time': True,\n", + " 'id': 8,\n", + " 'unix_format': 'dd.MM.yyyy '\n", + " 'HH:mm:ss'}],\n", + " 'default_port': 3306,\n", + " 'dialect': 'org.hibernate.dialect.MariaDBDialect',\n", + " 'driver_class': 'org.mariadb.jdbc.Driver',\n", + " 'environment': [{'iid': 1,\n", + " 'key': 'ROOT',\n", + " 'type': 'PRIVILEGED_USERNAME',\n", + " 'value': 'root'},\n", + " {'iid': 1,\n", + " 'key': 'MARIADB_ROOT_PASSWORD',\n", + " 'type': 'PRIVILEGED_PASSWORD',\n", + " 'value': 'mariadb'},\n", + " {'iid': 1,\n", + " 'key': 'MARIADB_USER',\n", + " 'type': 'USERNAME',\n", + " 'value': 'mariadb'},\n", + " {'iid': 1,\n", + " 'key': 'MARIADB_PASSWORD',\n", + " 'type': 'PASSWORD',\n", + " 'value': 'mariadb'},\n", + " {'iid': 1,\n", + " 'key': 'TZ',\n", + " 'type': 'PASSWORD',\n", + " 'value': 'UTC'}],\n", + " 'hash': None,\n", + " 'id': 1,\n", + " 'jdbc_method': 'mariadb',\n", + " 'logo': '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',\n", + " 'repository': 'mariadb',\n", + " 'size': None,\n", + " 'tag': '10.5'},\n", + " 'internal_name': 'fda-userdb-ethmusmir-afe3c41a-feff-11ec-8f21-64bc58900b78',\n", + " 'ip_address': None,\n", + " 'is_public': None,\n", + " 'name': 'ethmusmir afe3c41a-feff-11ec-8f21-64bc58900b78',\n", + " 'port': 40413,\n", + " 'state': None},\n", + " 'created': datetime.datetime(2022, 7, 8, 20, 51, 13),\n", + " 'creator': {'authorities': None,\n", + " 'containers': None,\n", + " 'databases': None,\n", + " 'email': 'martin.weise@tuwien.ac.at',\n", + " 'email_verified': False,\n", + " 'firstname': 'Martin',\n", + " 'id': 2,\n", + " 'identifiers': None,\n", + " 'lastname': 'Weise',\n", + " 'titles_after': None,\n", + " 'titles_before': 'DI',\n", + " 'username': 'user'},\n", + " 'deleted': None,\n", + " 'description': 'Feature Vectors extracted with the EthMusMIR Analysis Server '\n", + " 'https://github.com/ketchupok/ethmusmir applied on a remixed '\n", + " 'recording of the SeFiRe field recordings dataset '\n", + " 'https://github.com/matijama/field-recording-db',\n", + " 'exchange': 'ethmusmir_b3afba86-feff-11ec-8f21-64bc58900b78',\n", + " 'id': 1,\n", + " 'image': {'compiled': None,\n", + " 'date_formats': [{'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%Y-%c-%d',\n", + " 'example': '2022-01-30',\n", + " 'has_time': False,\n", + " 'id': 1,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%d.%c.%Y',\n", + " 'example': '30.01.2022',\n", + " 'has_time': False,\n", + " 'id': 2,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%d.%c.%y',\n", + " 'example': '30.01.22',\n", + " 'has_time': False,\n", + " 'id': 3,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%c/%d/%Y',\n", + " 'example': '01/30/2022',\n", + " 'has_time': False,\n", + " 'id': 4,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%c/%d/%y',\n", + " 'example': '01/30/22',\n", + " 'has_time': False,\n", + " 'id': 5,\n", + " 'unix_format': 'yyyy-MM-dd'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%Y-%c-%d %H:%i:%S.%f',\n", + " 'example': '2022-01-30 13:44:25.0',\n", + " 'has_time': True,\n", + " 'id': 6,\n", + " 'unix_format': 'yyyy-MM-dd HH:mm:ss.SSSSSS'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%Y-%c-%d %H:%i:%S',\n", + " 'example': '2022-01-30 13:44:25',\n", + " 'has_time': True,\n", + " 'id': 7,\n", + " 'unix_format': 'yyyy-MM-dd HH:mm:ss'},\n", + " {'created_at': datetime.datetime(2022, 7, 8, 20, 47, 14),\n", + " 'database_format': '%d.%c.%Y %H:%i:%S',\n", + " 'example': '30.01.2022 13:44:25',\n", + " 'has_time': True,\n", + " 'id': 8,\n", + " 'unix_format': 'dd.MM.yyyy HH:mm:ss'}],\n", + " 'default_port': 3306,\n", + " 'dialect': 'org.hibernate.dialect.MariaDBDialect',\n", + " 'driver_class': 'org.mariadb.jdbc.Driver',\n", + " 'environment': [{'iid': 1,\n", + " 'key': 'ROOT',\n", + " 'type': 'PRIVILEGED_USERNAME',\n", + " 'value': 'root'},\n", + " {'iid': 1,\n", + " 'key': 'MARIADB_ROOT_PASSWORD',\n", + " 'type': 'PRIVILEGED_PASSWORD',\n", + " 'value': 'mariadb'},\n", + " {'iid': 1,\n", + " 'key': 'MARIADB_USER',\n", + " 'type': 'USERNAME',\n", + " 'value': 'mariadb'},\n", + " {'iid': 1,\n", + " 'key': 'MARIADB_PASSWORD',\n", + " 'type': 'PASSWORD',\n", + " 'value': 'mariadb'},\n", + " {'iid': 1,\n", + " 'key': 'TZ',\n", + " 'type': 'PASSWORD',\n", + " 'value': 'UTC'}],\n", + " 'hash': None,\n", + " 'id': 1,\n", + " 'jdbc_method': 'mariadb',\n", + " 'logo': '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',\n", + " 'repository': 'mariadb',\n", + " 'size': None,\n", + " 'tag': '10.5'},\n", + " 'internal_name': 'ethmusmir_b3afba86-feff-11ec-8f21-64bc58900b78',\n", + " 'is_public': True,\n", + " 'language': None,\n", + " 'license': None,\n", + " 'name': 'ethmusmir b3afba86-feff-11ec-8f21-64bc58900b78',\n", + " 'publication_year': None,\n", + " 'publisher': None,\n", + " 'subjects': None,\n", + " 'tables': None}\n" + ] + } ], - "metadata": { - "collapsed": false - } + "source": [ + "response = database.create({\n", + " \"name\": \"ethmusmir \" + str(uuid.uuid1()),\n", + " \"description\": \"Feature Vectors extracted with the EthMusMIR Analysis Server https://github.com/ketchupok/ethmusmir applied on a remixed recording of the SeFiRe field recordings dataset https://github.com/matijama/field-recording-db\",\n", + " \"is_public\": True\n", + "}, container_id)\n", + "database_id = response.id\n", + "print(response)" + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 125, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'hash': 'aed197f5575f9bff89501d4fa7f58b0fc19b018848cc2e1c1c15388106a78ad0',\n", - " 'id': 2,\n", - " 'internal_name': 'fda-userdb-mir-783dbf3c-fe1b-11ec-aa77-8c8caada74c3',\n", - " 'is_public': None,\n", - " 'name': 'MIR 783dbf3c-fe1b-11ec-aa77-8c8caada74c3'}\n" + "{'id': 1, 'internal_name': 'feature_extraction', 'name': 'Feature Extraction'}\n" ] } ], "source": [ - "response = container.create1({\n", - " \"name\": \"MIR \" + str(uuid.uuid1()),\n", - " \"repository\": \"mariadb\",\n", - " \"tag\": \"10.5\"\n", - "})\n", - "container_id = response.id\n", + "response = table.create({\n", + " \"name\": \"Feature Extraction\",\n", + " \"description\": \"SeFiRe\",\n", + " \"columns\": [{\n", + " \"name\": \"Content\",\n", + " \"type\": \"STRING\",\n", + " \"unique\": False,\n", + " \"primary_key\": False,\n", + " \"null_allowed\": True,\n", + " }, {\n", + " \"name\": \"Start\",\n", + " \"type\": \"NUMBER\",\n", + " \"unique\": False,\n", + " \"primary_key\": False,\n", + " \"null_allowed\": True,\n", + " }, {\n", + " \"name\": \"Duration\",\n", + " \"type\": \"NUMBER\",\n", + " \"unique\": False,\n", + " \"primary_key\": False,\n", + " \"null_allowed\": True,\n", + " }]\n", + "}, container_id, database_id)\n", + "table_id = response.id\n", "print(response)" - ], + ] + }, + { + "cell_type": "code", + "execution_count": 126, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } - }, - { - "cell_type": "markdown", + }, + "outputs": [], "source": [ - "5. Start the mariadb container" - ], - "metadata": { - "collapsed": false - } + "host = re.findall(\"^https?:\\/\\/([a-z0-9\\.]+)\", url)[0]\n", + "id = re.findall(\"/([a-z0-9-]+)$\", url)[0]\n", + "\n", + "response = rq.get(\"https://\" + host + \"/api/records/\" + id + \"/files\")\n", + "record = response.json()" + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 127, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'hash': 'aed197f5575f9bff89501d4fa7f58b0fc19b018848cc2e1c1c15388106a78ad0',\n", - " 'id': 2,\n", - " 'internal_name': 'fda-userdb-mir-783dbf3c-fe1b-11ec-aa77-8c8caada74c3',\n", - " 'is_public': None,\n", - " 'name': 'MIR 783dbf3c-fe1b-11ec-aa77-8c8caada74c3'}\n" + "... save file contents from https://test.researchdata.tuwien.ac.at/api/records/vqpbr-5b889/files/1-4-5-23.wav/content\n", + "... extracted {'track': {'duration': 20.323265306122448, 'parts': [{'start': 0, 'duration': 5, 'content': 'instrumental'}, {'start': 5, 'duration': 4, 'content': 'speech'}, {'start': 9, 'duration': 6, 'content': 'choir singing'}, {'start': 15, 'duration': 4, 'content': 'solo singing'}], 'tempo': 'nan'}}\n", + "1\n", + "1\n", + "1\n", + "1\n" ] } ], "source": [ - "response = container.modify({\n", - " \"action\": \"START\"\n", - "}, container_id)\n", - "time.sleep(5)\n", - "print(response)" - ], + "for file in record[\"entries\"]:\n", + " print(\"... save file contents from\", file[\"links\"][\"content\"])\n", + " wav = rq.get(file[\"links\"][\"content\"])\n", + " filename = \"/tmp/\" + file[\"key\"]\n", + " open(filename, \"wb\").write(wav.content)\n", + " with open(filename, \"rb\") as f:\n", + " payload = f.read()\n", + " res = rq.post(audio, data=payload, headers={\"Content-Type\": \"audio/wav\"})\n", + " print(\"... extracted\", res.json())\n", + " for part in res.json()[\"track\"][\"parts\"]:\n", + " response = data.insert({\"data\": part}, container_id, database_id, table_id)\n", + " print(response)" + ] + }, + { + "cell_type": "code", + "execution_count": 128, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } - }, - { - "cell_type": "markdown", - "source": [ - "6. Create a database within the mariadb container" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'id': 1,\n", + " 'result': [{'Content': 'instrumental', 'Duration': 5, 'Start': 0},\n", + " {'Content': 'speech', 'Duration': 4, 'Start': 5},\n", + " {'Content': 'choir singing', 'Duration': 6, 'Start': 9},\n", + " {'Content': 'solo singing', 'Duration': 4, 'Start': 15}],\n", + " 'result_number': 4}\n" + ] + } ], - "metadata": { - "collapsed": false - } + "source": [ + "response = query.execute({\"statement\": \"SELECT `content`, `start`, `duration` FROM `feature_extraction`\"}, container_id, database_id)\n", + "query_id = response.id\n", + "print(response)" + ] }, { "cell_type": "code", - "execution_count": 7, - "outputs": [], - "source": [ - "response = database.create({\n", - " \"name\": \"MIR \" + str(uuid.uuid1()),\n", - " \"description\": \"Music Information Retrieval\",\n", - " \"is_public\": True\n", - "}, container_id)\n", - "database_id = response.id" - ], + "execution_count": 129, "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } - }, - { - "cell_type": "markdown", - "source": [ - "7. Import the feature .csv\n", - "\n", - "Now open [http://localhost:3000/](http://localhost:3000/) and import the .csv file by clicking the database. After successful creation of the table, come back here." + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'cid': 1,\n", + " 'created': datetime.datetime(2022, 7, 8, 20, 51, 20),\n", + " 'creator': {'authorities': None,\n", + " 'containers': None,\n", + " 'databases': None,\n", + " 'email': 'martin.weise@tuwien.ac.at',\n", + " 'email_verified': False,\n", + " 'firstname': 'Martin',\n", + " 'id': 2,\n", + " 'identifiers': None,\n", + " 'lastname': 'Weise',\n", + " 'titles_after': None,\n", + " 'titles_before': 'DI',\n", + " 'username': 'user'},\n", + " 'creators': [{'affiliation': 'TU Wien',\n", + " 'created': datetime.datetime(2022, 7, 8, 20, 51, 20),\n", + " 'id': 1,\n", + " 'last_modified': datetime.datetime(2022, 7, 8, 20, 51, 20),\n", + " 'name': 'Weise, Martin',\n", + " 'orcid': '0000-0003-4216-302X'},\n", + " {'affiliation': 'TU Wien',\n", + " 'created': datetime.datetime(2022, 7, 8, 20, 51, 20),\n", + " 'id': 2,\n", + " 'last_modified': datetime.datetime(2022, 7, 8, 20, 51, 20),\n", + " 'name': 'Rauber, Andreas',\n", + " 'orcid': '0000-0002-9272-6225'}],\n", + " 'dbid': 1,\n", + " 'description': 'description',\n", + " 'doi': None,\n", + " 'execution': datetime.datetime(2022, 7, 8, 0, 51, 18),\n", + " 'id': 1,\n", + " 'last_modified': datetime.datetime(2022, 7, 8, 20, 51, 20),\n", + " 'publication_year': 2022,\n", + " 'qid': 1,\n", + " 'query': 'SELECT `content`, `start`, `duration` FROM `feature_extraction`',\n", + " 'query_hash': '4af1784c047324b854ad1755472150493748604e56df428c0e4922d4c34e0344',\n", + " 'query_normalized': 'SELECT `content`, `start`, `duration` FROM '\n", + " '`feature_extraction`',\n", + " 'related': None,\n", + " 'result_hash': '66fd1c68928f47ad81e94a267c5d5b23c11bdca3eb0c512512270370a4219918',\n", + " 'result_number': 4,\n", + " 'title': 'title',\n", + " 'visibility': 'everyone'}\n" + ] + } ], - "metadata": { - "collapsed": false - } + "source": [ + "response = identifier.create({\n", + " \"qid\": query_id,\n", + " \"title\": \"title\",\n", + " \"description\": \"description\",\n", + " \"visibility\": \"everyone\",\n", + " \"creators\": [{\n", + " \"name\": \"Weise, Martin\",\n", + " \"affiliation\": \"TU Wien\",\n", + " \"orcid\": \"0000-0003-4216-302X\"\n", + " }, {\n", + " \"name\": \"Rauber, Andreas\",\n", + " \"affiliation\": \"TU Wien\",\n", + " \"orcid\": \"0000-0002-9272-6225\"\n", + " }],\n", + " \"publication_year\": 2022,\n", + " \"related_identifiers\": [{\n", + " \"value\": url,\n", + " \"type\": \"URL\",\n", + " \"relation\": \"IsCitedBy\"\n", + " }]\n", + "}, token, container_id, database_id)\n", + "identifier_id = response.id\n", + "print(response)" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.9.12" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 1 } \ No newline at end of file diff --git a/Makefile b/Makefile index bef68f644d17dda91d04e4d9f14f65a8c52d8aa3..7d57c171c4ac14797f23f00b754b835065968d21 100644 --- a/Makefile +++ b/Makefile @@ -58,32 +58,69 @@ build-frontend: yarn --cwd ./fda-ui install --legacy-peer-deps yarn --cwd ./fda-ui run build -build: clean build-backend build-frontend build-docker +tag: tag-identifier tag-container tag-database tag-discovery tag-gateway tag-query tag-table tag-document tag-units tag-broker -build-sandbox: clean build-backend build-frontend build-docker-sandbox +tag-identifier: + docker tag fda-identifier-service:latest fairdataaustria/fda-identifier-service:latest -doc: doc-identifier doc-container doc-database doc-discovery doc-gateway doc-query doc-table +tag-container: + docker tag fda-container-service:latest fairdataaustria/fda-container-service:latest -doc-identifier: - mvn -f ./fda-identifier-service/pom.xml clean install site -DskipTests +tag-database: + docker tag fda-database-service:latest fairdataaustria/fda-database-service:latest -doc-container: - mvn -f ./fda-container-service/pom.xml clean install site -DskipTests +tag-discovery: + docker tag fda-discovery-service:latest fairdataaustria/fda-discovery-service:latest -doc-database: - mvn -f ./fda-database-service/pom.xml clean install site -DskipTests +tag-gateway: + docker tag fda-gateway-service:latest fairdataaustria/fda-gateway-service:latest -doc-discovery: - mvn -f ./fda-discovery-service/pom.xml clean install site -DskipTests +tag-query: + docker tag fda-query-service:latest fairdataaustria/fda-query-service:latest -doc-gateway: - mvn -f ./fda-gateway-service/pom.xml clean install site -DskipTests +tag-table: + docker tag fda-table-service:latest fairdataaustria/fda-table-service:latest -doc-query: - mvn -f ./fda-query-service/pom.xml clean install site -DskipTests +tag-document: + docker tag fda-document-service:latest fairdataaustria/fda-document-service:latest -doc-table: - mvn -f ./fda-table-service/pom.xml clean install site -DskipTests +tag-units: + docker tag fda-units-service:latest fairdataaustria/fda-units-service:latest + +tag-broker: + docker tag fda-units-service:latest fairdataaustria/fda-broker-service:latest + +release: tag release-identifier release-container release-database release-discovery release-gateway release-query release-table release-document release-units release-broker + +release-identifier: + docker push fairdataaustria/fda-identifier-service:latest + +release-container: + docker push fairdataaustria/fda-container-service:latest + +release-database: + docker push fairdataaustria/fda-database-service:latest + +release-discovery: + docker push fairdataaustria/fda-discovery-service:latest + +release-gateway: + docker push fairdataaustria/fda-gateway-service:latest + +release-query: + docker push fairdataaustria/fda-query-service:latest + +release-table: + docker push fairdataaustria/fda-table-service:latest + +release-document: + docker push fairdataaustria/fda-document-service:latest + +release-units: + docker push fairdataaustria/fda-units-service:latest + +release-broker: + docker push fairdataaustria/fda-broker-service:latest test-backend: test-backend-auth test-backend-container test-backend-database test-backend-discovery test-backend-gateway test-backend-query test-backend-table @@ -121,45 +158,6 @@ test-frontend: clean build-frontend test: test-backend test-frontend -run-backend: - docker-compose up -d fda-container-service fda-database-service fda-query-service fda-table-service fda-authentication-service - -run-frontend: - docker-compose up -d fda-ui - -run: - docker-compose up -d - -run-sandbox: config-frontend config-backend - docker-compose -f docker-compose.prod.yml up -d - -logs: - docker-compose -f docker-compose.prod.yml logs - -seed: - ./.fda-deployment/seed - -clean-ide: - rm -rf .idea/ - rm -rf ./fda-authentication-service/.idea/ - rm -rf ./fda-identifier-service/.idea/ - rm -rf ./fda-container-service/.idea/ - rm -rf ./fda-database-service/.idea/ - rm -rf ./fda-discovery-service/.idea/ - rm -rf ./fda-gateway-service/.idea/ - rm -rf ./fda-query-service/.idea/ - rm -rf ./fda-table-service/.idea/ - -clean-frontend: - rm -f ./fda-ui/videos/*.webm - -clean-tmp: - ./.fda-deployment/clean-tmp - -clean-docker: - ./.fda-deployment/clean - -clean: clean-ide clean-frontend clean-docker clean-tmp teardown: ./.fda-deployment/teardown diff --git a/docker-compose.yml b/docker-compose.yml index 02ba641461872785da658c9161496eb23d6579ee..5e18bf903e856b4ee9338dfa77220e2b5c552a2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -37,7 +37,7 @@ services: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: fda - TZ: Europe/Vienna + TZ: UTC logging: driver: json-file @@ -51,7 +51,7 @@ services: fda-public: environment: SPRING_PROFILES_ACTIVE: docker - TZ: Europe/Vienna + TZ: UTC depends_on: fda-gateway-service: condition: service_healthy @@ -70,7 +70,7 @@ services: fda-public: environment: SPRING_PROFILES_ACTIVE: docker - TZ: Europe/Vienna + TZ: UTC ports: - "9095:9095" logging: @@ -89,7 +89,7 @@ services: GATEWAY_ENDPOINT: http://fda-gateway-service:9095 SEARCH_ENDPOINT: fda-search-service:9200 SPRING_PROFILES_ACTIVE: docker - TZ: Europe/Vienna + TZ: UTC ports: - "9092:9092" volumes: @@ -115,7 +115,7 @@ services: environment: GATEWAY_ENDPOINT: http://fda-gateway-service:9095 SPRING_PROFILES_ACTIVE: docker - TZ: Europe/Vienna + TZ: UTC ports: - "9091:9091" volumes: @@ -138,7 +138,7 @@ services: DOCUMENT_ENDPOINT: https://test.researchdata.tuwien.ac.at GATEWAY_ENDPOINT: http://fda-gateway-service:9095 SPRING_PROFILES_ACTIVE: docker - TZ: Europe/Vienna + TZ: UTC ports: - "9099:9099" volumes: @@ -158,10 +158,17 @@ services: networks: fda-public: environment: + GATEWAY_ENDPOINT: http://fda-gateway-service:9095 + WEBSITE: http://localhost:3000 + MAIL_FROM: Database Repository <noreply@dbrepo.ossdip.at> + MAIL_REPLY_TO: Martin Weise <martin.weise@tuwien.ac.at> + JWT_ISSUER: fda-dbrepo + JWT_SECRET: fda-secret + JWT_EXPIRATION: 86400000 SPRING_PROFILES_ACTIVE: docker SMTP_USERNAME: ${MAIL_USERNAME:-local} SMTP_PASSWORD: ${MAIL_PASSWORD:-local} - TZ: Europe/Vienna + TZ: UTC ports: - "9097:9097" depends_on: @@ -185,7 +192,8 @@ services: fda-userdb: environment: SPRING_PROFILES_ACTIVE: docker - TZ: Europe/Vienna + GATEWAY_ENDPOINT: http://fda-gateway-service:9095 + TZ: UTC ports: - "9093:9093" volumes: @@ -212,7 +220,7 @@ services: SEARCH_ENDPOINT: fda-search-service:9200 SPRING_PROFILES_ACTIVE: docker multipart.location: /tmp - TZ: Europe/Vienna + TZ: UTC ports: - "9094:9094" volumes: @@ -239,7 +247,7 @@ services: environment: GATEWAY_ENDPOINT: http://fda-gateway-service:9095 SPRING_PROFILES_ACTIVE: docker - TZ: Europe/Vienna + TZ: UTC ports: - "9096:9096" depends_on: @@ -262,6 +270,7 @@ services: command: sh -c "/wait && flask run" # docker-compose should not test the implementation environment: EUREKA_SERVER: http://fda-discovery-service:9090/eureka/ + TZ: UTC ports: - "5000:5000" volumes: @@ -283,7 +292,7 @@ services: fda-public: environment: EUREKA_SERVER: http://fda-discovery-service:9090/eureka/ - TZ: Europe/Vienna + TZ: UTC ports: - "5010:5010" volumes: @@ -303,7 +312,8 @@ services: image: fda-broker-service environment: SPRING_PROFILES_ACTIVE: docker - TZ: Europe/Vienna + GATEWAY_ENDPOINT: http://fda-gateway-service:9095 + TZ: UTC networks: fda-public: ports: @@ -362,6 +372,6 @@ services: environment: HOST: 0.0.0.0 API: http://fda-gateway-service:9095 - TZ: Europe/Vienna + TZ: UTC logging: driver: json-file diff --git a/fda-authentication-service/Dockerfile b/fda-authentication-service/Dockerfile index 7a951392f1e17cdefb976ed8375f3d394e91727f..47dfa13c4a913471b7bbebbce4bc7556e80b7014 100644 --- a/fda-authentication-service/Dockerfile +++ b/fda-authentication-service/Dockerfile @@ -32,4 +32,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar EXPOSE 9097 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./rest-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./rest-service.jar"] diff --git a/fda-authentication-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-authentication-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java index 2250fa50884df3f47b0b063975aea74f06203f80..5fda225698802f196d93364e47ed9ca54079ca26 100644 --- a/fda-authentication-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/fda-authentication-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java @@ -9,6 +9,8 @@ import org.springframework.context.event.EventListener; import java.io.File; import java.io.IOException; +import java.time.ZoneId; +import java.util.TimeZone; @Log4j2 @Configuration @@ -19,6 +21,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Files.touch(new File(readyPath)); } diff --git a/fda-authentication-service/rest-service/src/main/resources/application-docker.yml b/fda-authentication-service/rest-service/src/main/resources/application-docker.yml index 423d3a34994c2eb3ccc262d6ac367bb675f70752..cdb29e72a189b7b391a059c8c2e4e9b81ffe382e 100644 --- a/fda-authentication-service/rest-service/src/main/resources/application-docker.yml +++ b/fda-authentication-service/rest-service/src/main/resources/application-docker.yml @@ -40,13 +40,13 @@ eureka: client.serviceUrl.defaultZone: http://fda-discovery-service:9090/eureka/ fda: ready.path: /ready - website: http://localhost:3000 - gateway.endpoint: http://fda-gateway-service:9095 + website: "${WEBSITE}" + gateway.endpoint: "${GATEWAY_ENDPOINT}" mail: prefix: / - from: Database Repository <noreply@dbrepo.ossdip.at> - replyto: Martin Weise <martin.weise@tuwien.ac.at> + from: "${MAIL_FROM}" + replyto: "${MAIL_REPLY_TO}" jwt: - issuer: fda-dbrepo - secret: fda-secret - expiration.ms: 86400000 # 24 hrs \ No newline at end of file + issuer: "${JWT_ISSUER}" + secret: "${JWT_SECRET" + expiration.ms: "${JWT_EXPIRATION}" # 24 hrs \ No newline at end of file diff --git a/fda-authentication-service/rest-service/src/main/resources/application-prod.yml b/fda-authentication-service/rest-service/src/main/resources/application-prod.yml deleted file mode 100644 index 4ad299515f10194c2348957a084bb6ce4cf58fbb..0000000000000000000000000000000000000000 --- a/fda-authentication-service/rest-service/src/main/resources/application-prod.yml +++ /dev/null @@ -1,2 +0,0 @@ -fda: - website: https://dbrepo.ossdip.at \ No newline at end of file diff --git a/fda-authentication-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/fda-authentication-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index ef988c97c0ec5b75ef9a7c8a753da509a41bd347..0000000000000000000000000000000000000000 --- a/fda-authentication-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-broker-service/docker-entrypoint.sh b/fda-broker-service/docker-entrypoint.sh index e38452a94e7b06ab0c615d9fee5655fe3e16fb58..d97e733d1039d0b31aab404da2d90bb24630c401 100755 --- a/fda-broker-service/docker-entrypoint.sh +++ b/fda-broker-service/docker-entrypoint.sh @@ -1,3 +1,3 @@ #!/bin/bash rabbitmq-server & -java -Dlog4j2.formatMsgNoLookups=true -jar ./rest-service.jar \ No newline at end of file +java -Dlog4j2.formatMsgNoLookups=true -Duser.timezone=UTC -jar ./rest-service.jar \ No newline at end of file diff --git a/fda-broker-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-broker-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java index 2250fa50884df3f47b0b063975aea74f06203f80..048ccde769b2a9c741695f3e65291446d4b540d1 100644 --- a/fda-broker-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/fda-broker-service/rest-service/src/main/java/at/tuwien/config/ReadyConfig.java @@ -9,6 +9,7 @@ import org.springframework.context.event.EventListener; import java.io.File; import java.io.IOException; +import java.util.TimeZone; @Log4j2 @Configuration @@ -19,6 +20,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Files.touch(new File(readyPath)); } diff --git a/fda-broker-service/rest-service/src/main/resources/application-docker.yml b/fda-broker-service/rest-service/src/main/resources/application-docker.yml index 3294ce3b48b70f66ca8d19d82953d059f926ce7b..f32f4ae91b87fae88c1ebc1c26f06df2215c1392 100644 --- a/fda-broker-service/rest-service/src/main/resources/application-docker.yml +++ b/fda-broker-service/rest-service/src/main/resources/application-docker.yml @@ -29,4 +29,4 @@ eureka: client.serviceUrl.defaultZone: http://fda-discovery-service:9090/eureka/ fda: ready.path: /ready - gateway.endpoint: http://localhost:9095 \ No newline at end of file + gateway.endpoint: "${GATEWAY_ENDPOINT}" \ No newline at end of file diff --git a/fda-broker-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/fda-broker-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index ef988c97c0ec5b75ef9a7c8a753da509a41bd347..0000000000000000000000000000000000000000 --- a/fda-broker-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-container-service/Dockerfile b/fda-container-service/Dockerfile index 7593f330f2c110d4f4686054d0e468cfa4990681..61790a6159c691105ac31436df82bbd7c2ef45d8 100644 --- a/fda-container-service/Dockerfile +++ b/fda-container-service/Dockerfile @@ -30,4 +30,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar EXPOSE 9091 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./rest-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./rest-service.jar"] diff --git a/fda-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/fda-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index ef988c97c0ec5b75ef9a7c8a753da509a41bd347..0000000000000000000000000000000000000000 --- a/fda-container-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-container-service/services/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-container-service/services/src/main/java/at/tuwien/config/ReadyConfig.java index dda69e74398b4c9295828980ea5eed173e8145e3..9922f3ce1c886f3174245c4dc6b4447f3926a9a0 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/fda-container-service/services/src/main/java/at/tuwien/config/ReadyConfig.java @@ -14,6 +14,7 @@ import org.springframework.core.env.Environment; import java.io.File; import java.io.IOException; import java.util.Arrays; +import java.util.TimeZone; @Log4j2 @Configuration @@ -31,6 +32,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); seederImpl.seed(); Files.touch(new File(readyPath)); } diff --git a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/AbstractSeeder.java b/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/AbstractSeeder.java index c1eafdcd284fdaba48b35b6c2e98e65da22ec571..f86f68416e1dc11b08acc084fd090e6465868d76 100644 --- a/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/AbstractSeeder.java +++ b/fda-container-service/services/src/main/java/at/tuwien/seeder/impl/AbstractSeeder.java @@ -54,7 +54,7 @@ public abstract class AbstractSeeder { ContainerImageEnvironmentItem.builder() .iid(IMAGE_1_ID) .key("TZ") - .value("Europe/Vienna") + .value("UTC") .type(ContainerImageEnvironmentItemType.PASSWORD) .build()); diff --git a/fda-database-service/Dockerfile b/fda-database-service/Dockerfile index f0c281a971f5e6b13cc56e2ca40b6ef476961954..2323f5749d571fe6e63134eec33bd5143a33d693 100644 --- a/fda-database-service/Dockerfile +++ b/fda-database-service/Dockerfile @@ -30,4 +30,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar EXPOSE 9092 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./rest-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./rest-service.jar"] diff --git a/fda-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/fda-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index ef988c97c0ec5b75ef9a7c8a753da509a41bd347..0000000000000000000000000000000000000000 --- a/fda-database-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-database-service/services/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-database-service/services/src/main/java/at/tuwien/config/ReadyConfig.java index 0afd6a0c3f24fd065ddeeb7a66836e7c7ff30284..2cdff3189be8d055b1179a49080cfa05271b876f 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/fda-database-service/services/src/main/java/at/tuwien/config/ReadyConfig.java @@ -10,6 +10,7 @@ import org.springframework.core.env.Environment; import java.io.File; import java.io.IOException; +import java.util.TimeZone; @Configuration public class ReadyConfig { @@ -26,6 +27,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Files.touch(new File(readyPath)); } diff --git a/fda-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java b/fda-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java index 1cd66d5eb4809bacd75eac8560c33550e8f0c0b8..425dc223223cbf950fee17d79f55b6e5b4dda7d9 100644 --- a/fda-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java +++ b/fda-database-service/services/src/main/java/at/tuwien/mapper/DatabaseMapper.java @@ -53,7 +53,7 @@ public interface DatabaseMapper { @Mappings({ @Mapping(target = "id", source = "id"), @Mapping(target = "image", source = "container.image"), - @Mapping(target = "created", source = "created", dateFormat = "dd-MM-yyyy HH:mm"), + @Mapping(target = "created", source = "created", dateFormat = "dd-MM-yyyy HH:mm") }) DatabaseDto databaseToDatabaseDto(Database data); diff --git a/fda-discovery-service/Dockerfile b/fda-discovery-service/Dockerfile index 28d1fa6277255fde68558c0f4b44cf7e2e8f1dc7..0e249fdbe5d3f2dd624e138962b270880c9457f1 100644 --- a/fda-discovery-service/Dockerfile +++ b/fda-discovery-service/Dockerfile @@ -24,4 +24,4 @@ COPY --from=build ./discovery/target/discovery-*.jar ./discovery.jar EXPOSE 9090 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./discovery.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./discovery.jar"] diff --git a/fda-discovery-service/discovery/src/main/java/at/tuwien/discoveryserver/config/ReadyConfig.java b/fda-discovery-service/discovery/src/main/java/at/tuwien/discoveryserver/config/ReadyConfig.java index f03ad83fe546bd89a5553243cc3880cf4124d4a4..ff2029cc3fbd7817de8c08f8f9d90a087085bdc5 100644 --- a/fda-discovery-service/discovery/src/main/java/at/tuwien/discoveryserver/config/ReadyConfig.java +++ b/fda-discovery-service/discovery/src/main/java/at/tuwien/discoveryserver/config/ReadyConfig.java @@ -8,6 +8,7 @@ import org.springframework.context.event.EventListener; import java.io.File; import java.io.IOException; +import java.util.TimeZone; @Configuration public class ReadyConfig { @@ -17,6 +18,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Files.touch(new File(readyPath)); } diff --git a/fda-document-service/Dockerfile b/fda-document-service/Dockerfile index 93015fd61a17e46e5ebeb67da9f2004837dece9e..1c29acba07a7a2c06db885914853f767d73b6301 100644 --- a/fda-document-service/Dockerfile +++ b/fda-document-service/Dockerfile @@ -30,4 +30,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar EXPOSE 9099 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./rest-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./rest-service.jar"] diff --git a/fda-document-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/fda-document-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index ef988c97c0ec5b75ef9a7c8a753da509a41bd347..0000000000000000000000000000000000000000 --- a/fda-document-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-document-service/services/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-document-service/services/src/main/java/at/tuwien/config/ReadyConfig.java index 2250fa50884df3f47b0b063975aea74f06203f80..048ccde769b2a9c741695f3e65291446d4b540d1 100644 --- a/fda-document-service/services/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/fda-document-service/services/src/main/java/at/tuwien/config/ReadyConfig.java @@ -9,6 +9,7 @@ import org.springframework.context.event.EventListener; import java.io.File; import java.io.IOException; +import java.util.TimeZone; @Log4j2 @Configuration @@ -19,6 +20,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Files.touch(new File(readyPath)); } diff --git a/fda-gateway-service/Dockerfile b/fda-gateway-service/Dockerfile index 71de4b7d2f35a23f3214b219dc44ee8ea538ef0e..230fe76e7d4de17e8f5f25a637312966709136a0 100644 --- a/fda-gateway-service/Dockerfile +++ b/fda-gateway-service/Dockerfile @@ -24,4 +24,4 @@ COPY --from=build ./gateway/target/gateway-*.jar ./gateway.jar EXPOSE 9095 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./gateway.jar"] \ No newline at end of file +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./gateway.jar"] \ No newline at end of file diff --git a/fda-gateway-service/gateway/src/main/java/at/tuwien/gatewayservice/config/JacksonConfig.java b/fda-gateway-service/gateway/src/main/java/at/tuwien/gatewayservice/config/JacksonConfig.java deleted file mode 100644 index 7e45ccb10b2d43025c913853a906ba004e66137a..0000000000000000000000000000000000000000 --- a/fda-gateway-service/gateway/src/main/java/at/tuwien/gatewayservice/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.gatewayservice.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-gateway-service/gateway/src/main/java/at/tuwien/gatewayservice/config/ReadyConfig.java b/fda-gateway-service/gateway/src/main/java/at/tuwien/gatewayservice/config/ReadyConfig.java index ef0890ff0a9f284428ea8f6b34d1fe8dd173a1ed..7ab995ea98b7a8499eefe1cdb63ad7fa3f9d6cfe 100644 --- a/fda-gateway-service/gateway/src/main/java/at/tuwien/gatewayservice/config/ReadyConfig.java +++ b/fda-gateway-service/gateway/src/main/java/at/tuwien/gatewayservice/config/ReadyConfig.java @@ -9,6 +9,7 @@ import org.springframework.context.event.EventListener; import java.io.File; import java.io.IOException; +import java.util.TimeZone; @Log4j2 @Configuration @@ -19,6 +20,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException, InterruptedException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); log.info("Wait more for gateway start"); Thread.sleep(10 * 1000L); Files.touch(new File(readyPath)); diff --git a/fda-identifier-service/Dockerfile b/fda-identifier-service/Dockerfile index 46ecf0d561790ae0c64c43aa7ac543809579937b..c4f22e1debfc829acdfa627c69bf6bfe16fa16e5 100644 --- a/fda-identifier-service/Dockerfile +++ b/fda-identifier-service/Dockerfile @@ -31,4 +31,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./rest.jar EXPOSE 9096 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./rest.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./rest.jar"] diff --git a/fda-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/fda-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index ef988c97c0ec5b75ef9a7c8a753da509a41bd347..0000000000000000000000000000000000000000 --- a/fda-identifier-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-identifier-service/services/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-identifier-service/services/src/main/java/at/tuwien/config/ReadyConfig.java index 2c3a5d433c29af1f0f18c77ee92516e4ebe40d13..cf6ea857c1f373aabdeebe6761c8a99a8a93a965 100644 --- a/fda-identifier-service/services/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/fda-identifier-service/services/src/main/java/at/tuwien/config/ReadyConfig.java @@ -9,6 +9,7 @@ import org.springframework.context.event.EventListener; import javax.validation.constraints.NotNull; import java.io.File; import java.io.IOException; +import java.util.TimeZone; @Configuration public class ReadyConfig { @@ -19,6 +20,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Files.touch(new File(readyPath)); } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java index 5b1548629b99def237f66b7232864378cabcf06e..e49a313e248fb6a7cae5d3db017dbc8b38e74a22 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerActionTypeDto.java @@ -1,10 +1,26 @@ package at.tuwien.api.container; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.ToString; @Getter -@ToString public enum ContainerActionTypeDto { - START, STOP + + @JsonProperty("start") + START("start"), + + @JsonProperty("stop") + STOP("stop"); + + private String name; + + ContainerActionTypeDto(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java index 25507e8e7cbf792244d620fd501aea258c5e3ac2..9e9a069d600c510bfacceda2329456e74508c919 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerBriefDto.java @@ -1,6 +1,8 @@ package at.tuwien.api.container; import at.tuwien.api.user.UserDto; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -42,5 +44,6 @@ public class ContainerBriefDto { private Boolean isPublic; @Parameter(name = "container created") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java index 80b17f1a32a8fd167b368371e249cefdb83aab73..e49c5678704418c86c5cbd322031a95bb6e2cbfc 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerChangeDto.java @@ -14,7 +14,7 @@ import javax.validation.constraints.NotNull; public class ContainerChangeDto { @NotNull - @Parameter(required = true, example = "START") + @Parameter(required = true, example = "start") private ContainerActionTypeDto action; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java index a2c1c5c574881b2bdd25c83647bd03f74de935cf..50c085b4ccdfcb35f36df8a24f42740fc9a7245c 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/ContainerDto.java @@ -3,6 +3,7 @@ package at.tuwien.api.container; import at.tuwien.api.container.image.ImageDto; import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.user.UserDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -59,6 +60,7 @@ public class ContainerDto { @NotNull @Parameter(name = "start time", example = "2021-03-12T15:26:21.678396092Z") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java index c5f3fb7f79e447f7708f610a0afe2ae7ee78a009..f51cc811c08321137cf4b2999814c170361e79b6 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDateDto.java @@ -1,5 +1,6 @@ package at.tuwien.api.container.image; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -40,6 +41,7 @@ public class ImageDateDto { private Boolean hasTime; @JsonProperty("created_at") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant createdAt; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java index 0a989a4e099f046ae3b92320d7f22a6e2c2e256d..1003dd041bd2d8e5a00211cc4a0031713c5f6c39 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/container/image/ImageDto.java @@ -1,5 +1,6 @@ package at.tuwien.api.container.image; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -55,6 +56,7 @@ public class ImageDto { private String hash; @Parameter(required = true, example = "2021-03-12T15:26:21.678396092Z") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant compiled; @Parameter(required = true, example = "314295447") diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java index 978efcd015f3eba79f5974e6bb68b438ac129392..cb54ab1fa977678d85bf3fd9840b280d2fc5562c 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseBriefDto.java @@ -1,6 +1,7 @@ package at.tuwien.api.database; import at.tuwien.api.user.UserDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -25,7 +26,6 @@ public class DatabaseBriefDto { @Parameter(name = "database name", example = "Weather Australia") private String name; - @NotBlank(message = "description is required") @Parameter(name = "database description", example = "Weather in Australia") private String description; @@ -40,6 +40,7 @@ public class DatabaseBriefDto { private UserDto creator; @Parameter(name = "database creation time", example = "2020-08-04 11:12:00") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java index 3acfa9b4890a41b1ed47aa2a9c9315469b318ecb..ed8ae18aaa0dbfe5aeeb047fc3854f5ed6ac0948 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java @@ -5,6 +5,7 @@ import at.tuwien.api.container.image.ImageDto; import at.tuwien.api.database.table.TableDto; import at.tuwien.api.identifier.CreatorDto; import at.tuwien.api.user.UserDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -52,7 +53,6 @@ public class DatabaseDto { @Parameter(name = "database license", example = "MIT2") private LicenseDto license; - @NotBlank @Parameter(name = "database description", example = "Weather Australia 2009-2021") private String description; @@ -66,7 +66,6 @@ public class DatabaseDto { @Parameter(name = "database publication year") private Short publicationYear; - @NotNull @Parameter(name = "tables") private List<TableDto> tables; @@ -80,11 +79,12 @@ public class DatabaseDto { @Parameter(name = "container") private ContainerDto container; - @NotNull @Parameter(name = "database creation time", example = "2020-08-04 11:12:00") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; @Parameter(name = "database deletion time", example = "2020-08-04 11:13:00") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant deleted; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java index 730510ddfdd2cc986c63bae285d47ebd9b4b003f..adbbefc6692db299681ba19ffe937c9496ace218 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/LanguageTypeDto.java @@ -1,12 +1,572 @@ package at.tuwien.api.database; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.ToString; @Getter -@ToString public enum LanguageTypeDto { - EN, - DE, - OTHER + + @JsonProperty("ab") + AB("ab"), + + @JsonProperty("aa") + AA("aa"), + + @JsonProperty("af") + AF("af"), + + @JsonProperty("ak") + AK("ak"), + + @JsonProperty("sq") + SQ("sq"), + + @JsonProperty("am") + AM("am"), + + @JsonProperty("ar") + AR("ar"), + + @JsonProperty("an") + AN("an"), + + @JsonProperty("hy") + HY("hy"), + + @JsonProperty("as") + AS("as"), + + @JsonProperty("av") + AV("av"), + + @JsonProperty("ae") + AE("ae"), + + @JsonProperty("ay") + AY("ay"), + + @JsonProperty("az") + AZ("az"), + + @JsonProperty("bm") + BM("bm"), + + @JsonProperty("ba") + BA("ba"), + + @JsonProperty("eu") + EU("eu"), + + @JsonProperty("be") + BE("be"), + + @JsonProperty("bn") + BN("bn"), + + @JsonProperty("bh") + BH("bh"), + + @JsonProperty("bi") + BI("bi"), + + @JsonProperty("bs") + BS("bs"), + + @JsonProperty("br") + BR("br"), + + @JsonProperty("bg") + BG("bg"), + + @JsonProperty("my") + MY("my"), + + @JsonProperty("ca") + CA("ca"), + + @JsonProperty("km") + KM("km"), + + @JsonProperty("ch") + CH("ch"), + + @JsonProperty("ce") + CE("ce"), + + @JsonProperty("ny") + NY("ny"), + + @JsonProperty("zh") + ZH("zh"), + + @JsonProperty("cu") + CU("cu"), + + @JsonProperty("cv") + CV("cv"), + + @JsonProperty("kw") + KW("kw"), + + @JsonProperty("co") + CO("co"), + + @JsonProperty("cr") + CR("cr"), + + @JsonProperty("hr") + HR("hr"), + + @JsonProperty("cs") + CS("cs"), + + @JsonProperty("da") + DA("da"), + + @JsonProperty("dv") + DV("dv"), + + @JsonProperty("nl") + NL("nl"), + + @JsonProperty("dz") + DZ("dz"), + + @JsonProperty("en") + EN("en"), + + @JsonProperty("eo") + EO("eo"), + + @JsonProperty("et") + ET("et"), + + @JsonProperty("ee") + EE("ee"), + + @JsonProperty("fo") + FO("fo"), + + @JsonProperty("fj") + FJ("fj"), + + @JsonProperty("fi") + FI("fi"), + + @JsonProperty("fr") + FR("fr"), + + @JsonProperty("ff") + FF("ff"), + + @JsonProperty("gd") + GD("gd"), + + @JsonProperty("gl") + GL("gl"), + + @JsonProperty("lg") + LG("lg"), + + @JsonProperty("ka") + KA("ka"), + + @JsonProperty("de") + DE("de"), + + @JsonProperty("ki") + KI("ki"), + + @JsonProperty("el") + EL("el"), + + @JsonProperty("kl") + KL("kl"), + + @JsonProperty("gn") + GN("gn"), + + @JsonProperty("gu") + GU("gu"), + + @JsonProperty("ht") + HT("ht"), + + @JsonProperty("ha") + HA("ha"), + + @JsonProperty("he") + HE("he"), + + @JsonProperty("hz") + HZ("hz"), + + @JsonProperty("hi") + HI("hi"), + + @JsonProperty("ho") + HO("ho"), + + @JsonProperty("hu") + HU("hu"), + + @JsonProperty("is") + IS("is"), + + @JsonProperty("io") + IO("io"), + + @JsonProperty("ig") + IG("ig"), + + @JsonProperty("id") + ID("id"), + + @JsonProperty("ia") + IA("ia"), + + @JsonProperty("ie") + IE("ie"), + + @JsonProperty("iu") + IU("iu"), + + @JsonProperty("ik") + IK("ik"), + + @JsonProperty("ga") + GA("ga"), + + @JsonProperty("it") + IT("it"), + + @JsonProperty("ja") + JA("ja"), + + @JsonProperty("jv") + JV("jv"), + + @JsonProperty("kn") + KN("kn"), + + @JsonProperty("kr") + KR("kr"), + + @JsonProperty("ks") + KS("ks"), + + @JsonProperty("kk") + KK("kk"), + + @JsonProperty("rw") + RW("rw"), + + @JsonProperty("kv") + KV("kv"), + + @JsonProperty("kg") + KG("kg"), + + @JsonProperty("ko") + KO("ko"), + + @JsonProperty("kj") + KJ("kj"), + + @JsonProperty("ku") + KU("ku"), + + @JsonProperty("ky") + KY("ky"), + + @JsonProperty("lo") + LO("lo"), + + @JsonProperty("la") + LA("la"), + + @JsonProperty("lv") + LV("lv"), + + @JsonProperty("lb") + LB("lb"), + + @JsonProperty("li") + LI("li"), + + @JsonProperty("ln") + LN("ln"), + + @JsonProperty("lt") + LT("lt"), + + @JsonProperty("lu") + LU("lu"), + + @JsonProperty("mk") + MK("mk"), + + @JsonProperty("mg") + MG("mg"), + + @JsonProperty("ms") + MS("ms"), + + @JsonProperty("ml") + ML("ml"), + + @JsonProperty("mt") + MT("mt"), + + @JsonProperty("gv") + GV("gv"), + + @JsonProperty("mi") + MI("mi"), + + @JsonProperty("mr") + MR("mr"), + + @JsonProperty("mh") + MH("mh"), + + @JsonProperty("ro") + RO("ro"), + + @JsonProperty("mn") + MN("mn"), + + @JsonProperty("na") + NA("na"), + + @JsonProperty("nv") + NV("nv"), + + @JsonProperty("nd") + ND("nd"), + + @JsonProperty("ng") + NG("ng"), + + @JsonProperty("ne") + NE("ne"), + + @JsonProperty("se") + SE("se"), + + @JsonProperty("no") + NO("no"), + + @JsonProperty("nb") + NB("nb"), + + @JsonProperty("nn") + NN("nn"), + + @JsonProperty("ii") + II("ii"), + + @JsonProperty("oc") + OC("oc"), + + @JsonProperty("oj") + OJ("oj"), + + @JsonProperty("or") + OR("or"), + + @JsonProperty("om") + OM("om"), + + @JsonProperty("os") + OS("os"), + + @JsonProperty("pi") + PI("pi"), + + @JsonProperty("pa") + PA("pa"), + + @JsonProperty("ps") + PS("ps"), + + @JsonProperty("fa") + FA("fa"), + + @JsonProperty("pl") + PL("pl"), + + @JsonProperty("pt") + PT("pt"), + + @JsonProperty("qu") + QU("qu"), + + @JsonProperty("rm") + RM("rm"), + + @JsonProperty("rn") + RN("rn"), + + @JsonProperty("ru") + RU("ru"), + + @JsonProperty("sm") + SM("sm"), + + @JsonProperty("sg") + SG("sg"), + + @JsonProperty("sa") + SA("sa"), + + @JsonProperty("sc") + SC("sc"), + + @JsonProperty("sr") + SR("sr"), + + @JsonProperty("sn") + SN("sn"), + + @JsonProperty("sd") + SD("sd"), + + @JsonProperty("si") + SI("si"), + + @JsonProperty("sk") + SK("sk"), + + @JsonProperty("sl") + SL("sl"), + + @JsonProperty("so") + SO("so"), + + @JsonProperty("st") + ST("st"), + + @JsonProperty("nr") + NR("nr"), + + @JsonProperty("es") + ES("es"), + + @JsonProperty("su") + SU("su"), + + @JsonProperty("sw") + SW("sw"), + + @JsonProperty("ss") + SS("ss"), + + @JsonProperty("sv") + SV("sv"), + + @JsonProperty("tl") + TL("tl"), + + @JsonProperty("ty") + TY("ty"), + + @JsonProperty("tg") + TG("tg"), + + @JsonProperty("ta") + TA("ta"), + + @JsonProperty("tt") + TT("tt"), + + @JsonProperty("te") + TE("te"), + + @JsonProperty("th") + TH("th"), + + @JsonProperty("bo") + BO("bo"), + + @JsonProperty("ti") + TI("ti"), + + @JsonProperty("to") + TO("to"), + + @JsonProperty("ts") + TS("ts"), + + @JsonProperty("tn") + TN("tn"), + + @JsonProperty("tr") + TR("tr"), + + @JsonProperty("tk") + TK("tk"), + + @JsonProperty("tw") + TW("tw"), + + @JsonProperty("ug") + UG("ug"), + + @JsonProperty("uk") + UK("uk"), + + @JsonProperty("ur") + UR("ur"), + + @JsonProperty("uz") + UZ("uz"), + + @JsonProperty("ve") + VE("ve"), + + @JsonProperty("vi") + VI("vi"), + + @JsonProperty("vo") + VO("vo"), + + @JsonProperty("wa") + WA("wa"), + + @JsonProperty("cy") + CY("cy"), + + @JsonProperty("fy") + FY("fy"), + + @JsonProperty("wo") + WO("wo"), + + @JsonProperty("xh") + XH("xh"), + + @JsonProperty("yi") + YI("yi"), + + @JsonProperty("yo") + YO("yo"), + + @JsonProperty("za") + ZA("za"), + + @JsonProperty("zu") + ZU("zu"); + + private String name; + + LanguageTypeDto(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java index bd0e9eb27ed135c96aad6c92d3110c71543d3a61..b32564d7de94773448c1cc24e2e4ef5c1b100c67 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/query/QueryDto.java @@ -1,6 +1,7 @@ package at.tuwien.api.database.query; import at.tuwien.api.user.UserDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; @@ -66,9 +67,11 @@ public class QueryDto { private Long resultNumber; @NotNull(message = "created timestamp is required") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; @JsonProperty("last_modified") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant lastModified; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java index f83907e0bc3d5d1faa77c15f98a3675c71f6499a..979c2e5a5c66d19af351ffd0b24be9e84e1a7eb4 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java @@ -2,6 +2,7 @@ package at.tuwien.api.database.table; import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.user.UserDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -40,6 +41,7 @@ public class TableDto { private String description; @Parameter(name = "table creation time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; @NotNull diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java index 076552ef5df7e9e9f023e59ad72e371da37b03a5..20afc716eaa3abdccd7915c5dd287691c20ba236 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java @@ -1,5 +1,6 @@ package at.tuwien.api.database.table.columns.concepts; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -24,5 +25,6 @@ public class ConceptDto { @NotNull @Parameter(name = "created", required = true) + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/EntryDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/EntryDto.java index 68a2c82334730b6af81aeff11804c3bf828b5ed6..60e5efa6899921b8d4fdc4a1b7730d5267f50bb6 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/EntryDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/EntryDto.java @@ -21,11 +21,11 @@ public class EntryDto { @Parameter(name = "key", description = "Filename") private String key; - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS", timezone = "UTC") @Parameter(name = "updated") private Instant updated; - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS", timezone = "UTC") @Parameter(name = "created") private Instant created; diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/FileDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/FileDto.java index 63f820e3724f03190b932614a119b96277cfd7f0..fc7c9867e914663ccd6cceee5e2b4d22e8a23319 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/FileDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/FileDto.java @@ -31,12 +31,12 @@ public class FileDto { private String checksum; @NotNull - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC") @Parameter(name = "file creation timestamp") private Instant created; @NotNull - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC") @Parameter(name = "file updated timestamp") private Instant updated; diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/FileEntryDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/FileEntryDto.java index d4c7909d5a1d0f075ca474c60610a2b1dfbe1cea..e6692fdce84ae4468b25b67240c2ed5d44e92453 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/FileEntryDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/file/FileEntryDto.java @@ -25,12 +25,12 @@ public class FileEntryDto { private String key; @NotNull - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC") @Parameter(name = "file updated") private Instant updated; @NotNull - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC") @Parameter(name = "file created") private Instant created; diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/metadata/MetadataDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/metadata/MetadataDto.java index 835a772307ffb0a01484933f34b3874348388802..f37d2eb8407b8dddbb7722f9f6627a4bbc57d6ef 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/metadata/MetadataDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/metadata/MetadataDto.java @@ -45,7 +45,7 @@ public class MetadataDto { * for DataCite. */ @JsonProperty("publication_date") - @JsonFormat(pattern = "yyyy-MM-dd", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "UTC") @NotNull(message = "publication date is required") @Parameter(name = "publication date") private Date publicationDate; diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/record/RecordDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/record/RecordDto.java index 0f41c523bb4fa2a31dc9446681bc3c5e372d33c1..d89dd87fb2b597032e7dd408a98f93a267c04592 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/document/record/RecordDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/document/record/RecordDto.java @@ -24,11 +24,11 @@ public class RecordDto { @Parameter(name = "access") private AccessOptionsDto access; - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC") private Instant created; @JsonProperty("expires_at") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSSSS", timezone = "UTC") private Instant expiresAt; @NotNull(message = "files options is required") @@ -53,7 +53,7 @@ public class RecordDto { @Parameter(name = "revision id") private Long revisionId; - @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC+2") + @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX", timezone = "UTC") @Parameter(name = "updated date") private Instant updated; diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java index 2df93c5a0bb85b3b167872fcd41dfcaa5156ce38..3666f13ec7afd17af60948d45278d6f711eb29bc 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/CreatorDto.java @@ -1,5 +1,6 @@ package at.tuwien.api.identifier; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; @@ -28,9 +29,11 @@ public class CreatorDto { private String orcid; @NotNull + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; @JsonProperty("last_modified") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant lastModified; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java index 148e0571274fbe11b36663c3d9d1bbd74efcc99f..9a413dea5bc29092eeb02ae8c46befc01f9f121e 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java @@ -1,6 +1,7 @@ package at.tuwien.api.identifier; import at.tuwien.api.user.UserDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.Builder; @@ -61,6 +62,7 @@ public class IdentifierDto { @NotNull @Parameter(name = "query execution time") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant execution; @NotBlank @@ -93,9 +95,11 @@ public class IdentifierDto { @Parameter(name = "creators") private List<CreatorDto> creators; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; @JsonProperty("last_modified") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant lastModified; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java index 52d95bf5906c6897627ba4cca1218f0b1b442b5b..cd8eb211961c0e5d0e4faf8e323d4eeace6b2678 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/RelatedIdentifierDto.java @@ -1,6 +1,7 @@ package at.tuwien.api.identifier; import at.tuwien.api.user.UserDto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; @@ -38,11 +39,14 @@ public class RelatedIdentifierDto { private UserDto creator; @NotNull + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant created; @JsonProperty("last_modified") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant lastModified; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC") private Instant deleted; } diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java index 5ec6a6c4bd2ef0c9cfeabfefb33b72c4a4ed1d77..25739d3d4d45cabcc32504807338dfb2d2252098 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/identifier/VisibilityTypeDto.java @@ -1,12 +1,29 @@ package at.tuwien.api.identifier; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.ToString; @Getter -@ToString public enum VisibilityTypeDto { - EVERYONE, - TRUSTED, - SELF; + + @JsonProperty("everyone") + EVERYONE("everyone"), + + @JsonProperty("trusted") + TRUSTED("trusted"), + + @JsonProperty("self") + SELF("self"); + + private String name; + + VisibilityTypeDto(String name) { + this.name = name; + } + + @Override + public String toString() { + return this.name; + } } \ No newline at end of file diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java index 60cb7cb2bc239d1195ecaf044326256f78307cd0..5040bc5c26777138b715a8ea1c09f58d808c4986 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserBriefDto.java @@ -1,12 +1,10 @@ package at.tuwien.api.user; -import at.tuwien.api.container.ContainerDto; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; -import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.List; @@ -38,11 +36,9 @@ public class UserBriefDto { @Parameter(name = "titles after the last name") private String titlesAfter; - @NotBlank @Parameter(name = "first name") private String firstname; - @NotBlank @Parameter(name = "last name") private String lastname; diff --git a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java index 9d22449f408c75075a949083003208fdb87d8670..f634370909aa45dbc0e1545f009216ee92445568 100644 --- a/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java +++ b/fda-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java @@ -6,8 +6,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.Parameter; import lombok.*; -import javax.persistence.Column; -import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.List; @@ -39,11 +37,9 @@ public class UserDto { @Parameter(name = "titles after the last name") private String titlesAfter; - @NotBlank @Parameter(name = "first name") private String firstname; - @NotBlank @Parameter(name = "last name") private String lastname; diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/LanguageType.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/LanguageType.java index e37c2d3a2a6e97d5dca7240ea7a6b3f5ff88db4b..3dba76fdd703f29dc33338b254d60561621bbabd 100644 --- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/LanguageType.java +++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/LanguageType.java @@ -6,7 +6,188 @@ import lombok.ToString; @Getter @ToString public enum LanguageType { + AB, + AA, + AF, + AK, + SQ, + AM, + AR, + AN, + HY, + AS, + AV, + AE, + AY, + AZ, + BM, + BA, + EU, + BE, + BN, + BH, + BI, + BS, + BR, + BG, + MY, + CA, + KM, + CH, + CE, + NY, + ZH, + CU, + CV, + KW, + CO, + CR, + HR, + CS, + DA, + DV, + NL, + DZ, EN, + EO, + ET, + EE, + FO, + FJ, + FI, + FR, + FF, + GD, + GL, + LG, + KA, DE, - OTHER + KI, + EL, + KL, + GN, + GU, + HT, + HA, + HE, + HZ, + HI, + HO, + HU, + IS, + IO, + IG, + ID, + IA, + IE, + IU, + IK, + GA, + IT, + JA, + JV, + KN, + KR, + KS, + KK, + RW, + KV, + KG, + KO, + KJ, + KU, + KY, + LO, + LA, + LV, + LB, + LI, + LN, + LT, + LU, + MK, + MG, + MS, + ML, + MT, + GV, + MI, + MR, + MH, + RO, + MN, + NA, + NV, + ND, + NG, + NE, + SE, + NO, + NB, + NN, + II, + OC, + OJ, + OR, + OM, + OS, + PI, + PA, + PS, + FA, + PL, + PT, + QU, + RM, + RN, + RU, + SM, + SG, + SA, + SC, + SR, + SN, + SD, + SI, + SK, + SL, + SO, + ST, + NR, + ES, + SU, + SW, + SS, + SV, + TL, + TY, + TG, + TA, + TT, + TE, + TH, + BO, + TI, + TO, + TS, + TN, + TR, + TK, + TW, + UG, + UK, + UR, + UZ, + VE, + VI, + VO, + WA, + CY, + FY, + WO, + XH, + YI, + YO, + ZA, + ZU; } diff --git a/fda-query-service/Dockerfile b/fda-query-service/Dockerfile index fdc80a241b32d17852e80934fdb0bce199fdf0cb..26b8d50cd6772da3899861c66e3e36831bf2ccba 100644 --- a/fda-query-service/Dockerfile +++ b/fda-query-service/Dockerfile @@ -31,4 +31,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./rest-service.jar EXPOSE 9093 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./rest-service.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./rest-service.jar"] diff --git a/fda-query-service/rest-service/src/main/resources/application-docker.yml b/fda-query-service/rest-service/src/main/resources/application-docker.yml index 3b946630141c46a21d47861a08918ceb34f5e0d0..ca94cbdda393d26c685f2ab673cdc03e57321a65 100644 --- a/fda-query-service/rest-service/src/main/resources/application-docker.yml +++ b/fda-query-service/rest-service/src/main/resources/application-docker.yml @@ -31,5 +31,5 @@ eureka: instance.hostname: fda-query-service client.serviceUrl.defaultZone: http://fda-discovery-service:9090/eureka/ fda: - gateway.endpoint: http://fda-gateway-service:9095 + gateway.endpoint: "${GATEWAY_ENDPOINT}" ready.path: /ready diff --git a/fda-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/fda-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index ef988c97c0ec5b75ef9a7c8a753da509a41bd347..0000000000000000000000000000000000000000 --- a/fda-query-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-query-service/services/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-query-service/services/src/main/java/at/tuwien/config/ReadyConfig.java index 0bee3b961edd4ca456f0243c8eede630a4a54716..acb63c91f4f0a669aad2d73e70d7dd469999b25f 100644 --- a/fda-query-service/services/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/fda-query-service/services/src/main/java/at/tuwien/config/ReadyConfig.java @@ -8,6 +8,7 @@ import org.springframework.context.event.EventListener; import java.io.File; import java.io.IOException; +import java.util.TimeZone; @Configuration public class ReadyConfig { @@ -17,6 +18,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Files.touch(new File(readyPath)); } diff --git a/fda-table-service/Dockerfile b/fda-table-service/Dockerfile index 82dc30e3cda2da3134b2a75bc96403d449e79179..8e46d03da510f324f74195e24045e82608ed1ce3 100644 --- a/fda-table-service/Dockerfile +++ b/fda-table-service/Dockerfile @@ -31,4 +31,4 @@ COPY --from=build ./rest-service/target/rest-service-*.jar ./rest.jar EXPOSE 9094 -ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-jar", "./rest.jar"] +ENTRYPOINT ["java", "-Dlog4j2.formatMsgNoLookups=true", "-Duser.timezone=UTC", "-jar", "./rest.jar"] diff --git a/fda-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java b/fda-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java deleted file mode 100644 index ef988c97c0ec5b75ef9a7c8a753da509a41bd347..0000000000000000000000000000000000000000 --- a/fda-table-service/services/src/main/java/at/tuwien/config/JacksonConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package at.tuwien.config; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class JacksonConfig { - - @Bean - public ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - return objectMapper; - } - -} diff --git a/fda-table-service/services/src/main/java/at/tuwien/config/ReadyConfig.java b/fda-table-service/services/src/main/java/at/tuwien/config/ReadyConfig.java index 0bee3b961edd4ca456f0243c8eede630a4a54716..acb63c91f4f0a669aad2d73e70d7dd469999b25f 100644 --- a/fda-table-service/services/src/main/java/at/tuwien/config/ReadyConfig.java +++ b/fda-table-service/services/src/main/java/at/tuwien/config/ReadyConfig.java @@ -8,6 +8,7 @@ import org.springframework.context.event.EventListener; import java.io.File; import java.io.IOException; +import java.util.TimeZone; @Configuration public class ReadyConfig { @@ -17,6 +18,7 @@ public class ReadyConfig { @EventListener(ApplicationReadyEvent.class) public void init() throws IOException { + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); Files.touch(new File(readyPath)); } diff --git a/fda-ui/components/QueryList.vue b/fda-ui/components/QueryList.vue index 260570d5f4d6df73a2172c4fcebd0113a07c77e8..adcb6301cf477492463da708019bc5b6c521eb32 100644 --- a/fda-ui/components/QueryList.vue +++ b/fda-ui/components/QueryList.vue @@ -51,7 +51,7 @@ Execution Timestamp </v-list-item-title> <v-list-item-content> - {{ execution }} + {{ queryDetails.execution }} </v-list-item-content> </v-list-item-content> </v-list-item> @@ -73,7 +73,6 @@ </template> <script> -import { format } from 'date-fns' export default { data () { return { @@ -104,12 +103,6 @@ export default { return { headers: { Authorization: `Bearer ${this.token}` } } - }, - execution () { - return format(new Date(this.queryDetails.execution), 'dd.MM.yyyy HH:mm:ss') - }, - created () { - return format(new Date(this.queryDetails.created), 'dd.MM.yyyy HH:mm:ss') } }, mounted () { diff --git a/fda-ui/components/TableList.vue b/fda-ui/components/TableList.vue index eda1a482accfa0af826e58b51ab090b73c5acd9f..0ae53b17102c2fb6867bb03d697d610ee663b3bc 100644 --- a/fda-ui/components/TableList.vue +++ b/fda-ui/components/TableList.vue @@ -61,7 +61,7 @@ Table Creation </v-list-item-title> <v-list-item-content> - {{ creation }} + {{ tableDetails.created }} </v-list-item-content> </v-list-item-content> </v-list-item> @@ -147,8 +147,6 @@ </template> <script> -import { format } from 'date-fns' - export default { data () { return { @@ -205,9 +203,6 @@ export default { return { headers: { Authorization: `Bearer ${this.token}` } } - }, - creation () { - return this.formatDate(this.tableDetails.created) } }, mounted () { @@ -243,9 +238,6 @@ export default { this.tableDetails = select[0] } }, - formatDate (d) { - return format(new Date(d), 'dd.MM.yyyy HH:mm:ss') - }, /** * if tableId is given, open the table after refresh */ diff --git a/fda-ui/components/dialogs/CreateDB.vue b/fda-ui/components/dialogs/CreateDB.vue index f02383958669e1eb17ba1e32b69610939f0094c9..95fbda44b1e0cf5c095e87ea6b75c567a9c95424 100644 --- a/fda-ui/components/dialogs/CreateDB.vue +++ b/fda-ui/components/dialogs/CreateDB.vue @@ -172,7 +172,7 @@ export default { try { this.loading = true this.error = false - res = await this.$axios.put(`/api/container/${containerId}`, { action: 'START' }, this.config) + res = await this.$axios.put(`/api/container/${containerId}`, { action: 'start' }, this.config) console.debug('started container', res.data) } catch (err) { this.error = true diff --git a/fda-ui/components/dialogs/EditDB.vue b/fda-ui/components/dialogs/EditDB.vue index 3d3d8b09be961dd56b16cf5e1041f88e13bfedf8..ca25007a937d85ae5d4f8611f6b043129f5f4b37 100644 --- a/fda-ui/components/dialogs/EditDB.vue +++ b/fda-ui/components/dialogs/EditDB.vue @@ -81,7 +81,6 @@ </template> <script> - export default { props: { database: { diff --git a/fda-ui/components/dialogs/EditTuple.vue b/fda-ui/components/dialogs/EditTuple.vue index ff64c1824afdfa72e7f2b2190366ea39d2cbcabe..b38b876f09d6b2218424781dd0eb20d62aa7e85a 100644 --- a/fda-ui/components/dialogs/EditTuple.vue +++ b/fda-ui/components/dialogs/EditTuple.vue @@ -90,8 +90,6 @@ </template> <script> -import { format } from 'date-fns' - export default { props: { tuple: { @@ -178,9 +176,6 @@ export default { console.error('Failed to add tuple', err) this.$toast.error('Failed to add tuple') } - }, - formatDate (date) { - return format(new Date(date), 'dd.MM.yyyy HH:mm:ss') } } } diff --git a/fda-ui/components/dialogs/PersistQuery.vue b/fda-ui/components/dialogs/PersistQuery.vue index 2153cb68f7531e43bb38e8ea1bcecc376d2932c1..3e917665bd64276f0284331745168a3f8d4286fe 100644 --- a/fda-ui/components/dialogs/PersistQuery.vue +++ b/fda-ui/components/dialogs/PersistQuery.vue @@ -161,11 +161,11 @@ export default { error: false, // XXX: `error` is never changed visibility: [{ name: 'Public', - value: 'EVERYONE' + value: 'everyone' }, { name: 'Only me', - value: 'SELF' + value: 'self' }], database: { id: null, @@ -234,7 +234,7 @@ export default { title: null, description: null, publication_year: parseInt(new Date().getFullYear()), - visibility: 'EVERYONE', + visibility: 'everyone', doi: null, creators: [], related_identifiers: [] diff --git a/fda-ui/components/dialogs/TimeTravel.vue b/fda-ui/components/dialogs/TimeTravel.vue index 6ff2e91abc1442113ab6680b4147b3efd5c7d856..7d9ba0e89f4cbadb3735b1d75ce2a726e725de26 100644 --- a/fda-ui/components/dialogs/TimeTravel.vue +++ b/fda-ui/components/dialogs/TimeTravel.vue @@ -55,7 +55,6 @@ <script> import { Bar } from 'vue-chartjs/legacy' -import { format } from 'date-fns' import { Chart as ChartJS, Title, Tooltip, BarElement, CategoryScale, LinearScale, LogarithmicScale } from 'chart.js' ChartJS.register(Title, Tooltip, BarElement, CategoryScale, LinearScale, LogarithmicScale) @@ -136,8 +135,8 @@ export default { headers: this.requestHeaders }) this.error = false - this.chartData.labels = res.data.map(d => format(new Date(d.timestamp), 'dd.MM.yyyy HH:mm:ss')) - this.chartData.dates = res.data.map(d => format(new Date(d.timestamp), 'yyyy-MM-dd HH:mm:ss')) + this.chartData.labels = res.data.map(d => d.timestamp) + this.chartData.dates = res.data.map(d => d.timestamp) this.chartData.datasets = [{ backgroundColor: this.$vuetify.theme.themes.light.primary, data: res.data.map(d => d.total) diff --git a/fda-ui/pages/container/_container_id/database/_database_id/info.vue b/fda-ui/pages/container/_container_id/database/_database_id/info.vue index 75d4a7546369287465b9cbcbfaa914dc522a96f7..85fa90684e1383f8edbdde9fc251de7923601ace 100644 --- a/fda-ui/pages/container/_container_id/database/_database_id/info.vue +++ b/fda-ui/pages/container/_container_id/database/_database_id/info.vue @@ -47,7 +47,7 @@ </v-list-item-title> <v-list-item-content> <v-skeleton-loader v-if="loading" type="text" class="skeleton-small" /> - <span v-if="!loading">{{ created }}</span> + <span v-if="!loading">{{ database.created }}</span> </v-list-item-content> <v-list-item-title class="mt-2"> Language @@ -92,7 +92,6 @@ <script> import DBToolbar from '@/components/DBToolbar' import EditDB from '@/components/dialogs/EditDB' -import { format } from 'date-fns' export default { components: { @@ -158,9 +157,6 @@ export default { language () { return this.database.language === null ? '(none)' : this.database.language }, - created () { - return format(new Date(this.database.created), 'dd.MM.yyyy HH:mm:ss') - }, publication_year () { return this.database.publication_year === null ? '(none)' : this.database.publication_year }, @@ -197,9 +193,6 @@ export default { closeDialog () { this.loadDatabase() this.editDbDialog = false - }, - formatDate (d) { - return format(new Date(d), 'dd.MM.yyyy HH:mm:ss') } } } diff --git a/fda-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue b/fda-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue index 24b8281273fe91577605ace7b57683e43c37566d..d93a18c293e220e8ef03cc7668fde281296d7a8c 100644 --- a/fda-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue +++ b/fda-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue @@ -171,7 +171,7 @@ </v-list-item-title> <v-list-item-content> <v-skeleton-loader v-if="loadingQuery" type="text" class="skeleton-small" /> - <span v-if="!loadingQuery">{{ query_creation }}</span> + <span v-if="!loadingQuery">{{ query.created }}</span> </v-list-item-content> </v-list-item-content> </v-list-item> @@ -219,7 +219,6 @@ </div> </template> <script> -import { format } from 'date-fns' import PersistQuery from '@/components/dialogs/PersistQuery' import OrcidIcon from '@/components/icons/OrcidIcon' @@ -328,7 +327,7 @@ export default { return this.database.is_public }, result_everyone () { - return this.database.is_public || this.identifier.visibility === 'EVERYONE' + return this.database.is_public || this.identifier.visibility === 'everyone' }, result_visibility () { if (this.database.is_public) { @@ -337,13 +336,13 @@ export default { if (this.query.creator.username === this.username) { return true } - return this.identifier.visibility === 'EVERYONE' + return this.identifier.visibility === 'everyone' }, result_visibility_icon () { if (this.database.is_public) { return true } - return this.identifier.visibility === 'EVERYONE' + return this.identifier.visibility === 'everyone' }, statement () { return this.identifier.id ? this.identifier.query : this.query.query @@ -358,10 +357,7 @@ export default { return 'sha256:' + (this.identifier.id ? this.identifier.result_hash : this.query.result_hash) }, execution () { - return this.identifier.id ? this.formatDate(this.identifier.execution) : this.formatDate(this.query.execution) - }, - query_creation () { - return this.formatDate(this.query.created) + return this.identifier.id ? this.identifier.execution : this.query.execution }, creator () { if (this.query.creator.username === null) { @@ -382,9 +378,6 @@ export default { .then(() => this.loadMetadata()) }, methods: { - formatDate (d) { - return format(new Date(d), 'dd.MM.yyyy HH:mm:ss') - }, async metadata () { this.metadataLoading = true try { diff --git a/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue b/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue index 87650d442df2af8988db507a2aee841f0f3d43f0..b63b89edf271083fb7d22b462017aaee67007cc9 100644 --- a/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue +++ b/fda-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue @@ -74,7 +74,6 @@ <script> import EditTuple from '@/components/dialogs/EditTuple' import TimeTravel from '@/components/dialogs/TimeTravel' -import { format } from 'date-fns' export default { components: { @@ -251,9 +250,6 @@ export default { this.$toast.error('Could not load table data.') } this.loadingData = false - }, - formatDate (d) { - return format(new Date(d), 'yyyy-MM-dd HH:mm:ss') } } } diff --git a/fda-ui/pages/container/index.vue b/fda-ui/pages/container/index.vue index 8ed348186732b8f9288978ba8f70cefcab0673be..fccc196ad93642b946e5d9e06e950d4a384da26b 100644 --- a/fda-ui/pages/container/index.vue +++ b/fda-ui/pages/container/index.vue @@ -46,7 +46,7 @@ <v-icon v-if="item.database.creator.email_verified" small color="primary">mdi-check-decagram</v-icon> </sup> </td> - <td>{{ formatDate(item.created) }}</td> + <td>{{ item.created }}</td> </tr> </tbody> </template> @@ -64,8 +64,6 @@ <script> import { mdiDatabaseArrowRightOutline } from '@mdi/js' import CreateDB from '@/components/dialogs/CreateDB' -import { formatDistance, format } from 'date-fns' -import deLocale from 'date-fns/locale/de' export default { components: { @@ -156,19 +154,6 @@ export default { }, loadDatabase (container) { this.$router.push(`/container/${container.id}/database/${container.database.id}/info`) - }, - trim (s) { - return s.slice(0, 12) - }, - formatDate (d) { - return format(new Date(d), 'dd.MM.yyyy HH:mm:ss') - }, - relativeDate (d) { - let options = { addSuffix: true } - if (this.$i18n.locale === 'de') { - options = { ...options, locale: deLocale } - } - return formatDistance(new Date(d), new Date(), options) } } }