diff --git a/.DS_Store b/.DS_Store index b602e97..cbf9c35 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.github/workflows/google-cloudrun-docker.yml b/.github/workflows/google-cloudrun-docker.yml deleted file mode 100644 index 678288a..0000000 --- a/.github/workflows/google-cloudrun-docker.yml +++ /dev/null @@ -1,110 +0,0 @@ -# This workflow build and push a Docker container to Google Artifact Registry and deploy it on Cloud Run when a commit is pushed to the "main" branch -# -# Overview: -# -# 1. Authenticate to Google Cloud -# 2. Authenticate Docker to Artifact Registry -# 3. Build a docker container -# 4. Publish it to Google Artifact Registry -# 5. Deploy it to Cloud Run -# -# To configure this workflow: -# -# 1. Ensure the required Google Cloud APIs are enabled: -# -# Cloud Run run.googleapis.com -# Artifact Registry artifactregistry.googleapis.com -# -# 2. Create and configure Workload Identity Federation for GitHub (https://github.com/google-github-actions/auth#setting-up-workload-identity-federation) -# -# 3. Ensure the required IAM permissions are granted -# -# Cloud Run -# roles/run.admin -# roles/iam.serviceAccountUser (to act as the Cloud Run runtime service account) -# -# Artifact Registry -# roles/artifactregistry.admin (project or repository level) -# -# NOTE: You should always follow the principle of least privilege when assigning IAM roles -# -# 4. Create GitHub secrets for WIF_PROVIDER and WIF_SERVICE_ACCOUNT -# -# 5. Change the values for the GAR_LOCATION, SERVICE and REGION environment variables (below). -# -# NOTE: To use Google Container Registry instead, replace ${{ env.GAR_LOCATION }}-docker.pkg.dev with gcr.io -# -# For more support on how to run this workflow, please visit https://github.com/marketplace/actions/deploy-to-cloud-run -# -# Further reading: -# Cloud Run IAM permissions - https://cloud.google.com/run/docs/deploying -# Artifact Registry IAM permissions - https://cloud.google.com/artifact-registry/docs/access-control#roles -# Container Registry vs Artifact Registry - https://cloud.google.com/blog/products/application-development/understanding-artifact-registry-vs-container-registry -# Principle of least privilege - https://cloud.google.com/blog/products/identity-security/dont-get-pwned-practicing-the-principle-of-least-privilege - -name: Build and Deploy to Cloud Run - -on: - push: - branches: [ "staging" ] - -env: - PROJECT_ID: circle-425516 # TODO: update Google Cloud project id - GAR_NAME: circle-artifacts - GAR_LOCATION: us-west2 # TODO: update Artifact Registry location - SERVICE: circle-app # TODO: update Cloud Run service name - REGION: us-west2 # TODO: update Cloud Run service region - -jobs: - deploy: - # Add 'id-token' with the intended permissions for workload identity federation - permissions: - contents: 'read' - id-token: 'write' - - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - # - name: Google Auth - # id: auth - # uses: 'google-github-actions/auth@v0' - # with: - # token_format: 'access_token' - # workload_identity_provider: '${{ secrets.WIF_PROVIDER }}' # e.g. - projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider - # service_account: '${{ secrets.WIF_SERVICE_ACCOUNT }}' # e.g. - my-service-account@my-project.iam.gserviceaccount.com - - # NOTE: Alternative option - authentication via credentials json - - name: Google Auth - id: auth - uses: 'google-github-actions/auth@v2' - with: - credentials_json: '${{ secrets.GCP_CREDENTIALS }}' - - # BEGIN - Docker auth and build (NOTE: If you already have a container image, these Docker steps can be omitted) - - # Authenticate Docker to Google Cloud Artifact Registry - - name: Docker Auth - run: |- - gcloud auth configure-docker "${{ env.GAR_LOCATION }}-docker.pkg.dev" - - - name: Build and Push Container - run: |- - docker build -t "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.GAR_NAME }}/${{ env.SERVICE }}:${{ github.sha }}" ./ - docker push "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.GAR_NAME }}/${{ env.SERVICE }}:${{ github.sha }}" - - # END - Docker auth and build - - # - name: Deploy to Cloud Run - # id: deploy - # uses: google-github-actions/deploy-cloudrun@v0 - # with: - # service: ${{ env.SERVICE }} - # region: ${{ env.REGION }} - # # NOTE: If using a pre-built image, update the image name here - # image: ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}:${{ github.sha }} - - # # If required, use the Cloud Run url output in later steps - # - name: Show Output - # run: echo ${{ steps.deploy.outputs.url }} diff --git a/.github/workflows/terraform.yml b/.github/workflows/terraform.yml index 9222af9..adf99fc 100644 --- a/.github/workflows/terraform.yml +++ b/.github/workflows/terraform.yml @@ -3,8 +3,7 @@ name: "Terraform" on: push: branches: ["main"] - pull_request: - + permissions: contents: read @@ -33,22 +32,73 @@ jobs: # Initialize a new or existing Terraform working directory by creating initial files, loading any remote state, downloading modules, etc. - name: Terraform Init run: terraform init + env: + GOOGLE_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }} + TF_VAR_MONGO_URI: ${{ secrets.MONGO_URI }} + TF_VAR_GOOGLE_TYPE: ${{ secrets.GOOGLE_TYPE }} + TF_VAR_GOOGLE_PROJECT_ID: ${{ secrets.GOOGLE_PROJECT_ID }} + TF_VAR_GOOGLE_PRIVATE_KEY_ID: ${{ secrets.GOOGLE_PRIVATE_KEY_ID }} + TF_VAR_GOOGLE_PRIVATE_KEY: ${{ secrets.GOOGLE_PRIVATE_KEY }} + TF_VAR_GOOGLE_CLIENT_EMAIL: ${{ secrets.GOOGLE_CLIENT_EMAIL }} + TF_VAR_GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + TF_VAR_GOOGLE_AUTH_URI: ${{ secrets.GOOGLE_AUTH_URI }} + TF_VAR_GOOGLE_TOKEN_URI: ${{ secrets.GOOGLE_TOKEN_URI }} + TF_VAR_GOOGLE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.GOOGLE_AUTH_PROVIDER_X509_CERT_URL }} + TF_VAR_GOOGLE_CLIENT_X509_CERT_URL: ${{ secrets.GOOGLE_CLIENT_X509_CERT_URL }} + TF_VAR_GOOGLE_UNIVERSE_DOMAIN: ${{ secrets.GOOGLE_UNIVERSE_DOMAIN }} + # Checks that all Terraform configuration files adhere to a canonical format - name: Terraform Format run: terraform fmt -check env: GOOGLE_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }} + TF_VAR_MONGO_URI: ${{ secrets.MONGO_URI }} + TF_VAR_GOOGLE_TYPE: ${{ secrets.GOOGLE_TYPE }} + TF_VAR_GOOGLE_PROJECT_ID: ${{ secrets.GOOGLE_PROJECT_ID }} + TF_VAR_GOOGLE_PRIVATE_KEY_ID: ${{ secrets.GOOGLE_PRIVATE_KEY_ID }} + TF_VAR_GOOGLE_PRIVATE_KEY: ${{ secrets.GOOGLE_PRIVATE_KEY }} + TF_VAR_GOOGLE_CLIENT_EMAIL: ${{ secrets.GOOGLE_CLIENT_EMAIL }} + TF_VAR_GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + TF_VAR_GOOGLE_AUTH_URI: ${{ secrets.GOOGLE_AUTH_URI }} + TF_VAR_GOOGLE_TOKEN_URI: ${{ secrets.GOOGLE_TOKEN_URI }} + TF_VAR_GOOGLE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.GOOGLE_AUTH_PROVIDER_X509_CERT_URL }} + TF_VAR_GOOGLE_CLIENT_X509_CERT_URL: ${{ secrets.GOOGLE_CLIENT_X509_CERT_URL }} + TF_VAR_GOOGLE_UNIVERSE_DOMAIN: ${{ secrets.GOOGLE_UNIVERSE_DOMAIN }} # Generates an execution plan for Terraform - name: Terraform Plan run: terraform plan -input=false env: GOOGLE_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }} - + TF_VAR_MONGO_URI: ${{ secrets.MONGO_URI }} + TF_VAR_GOOGLE_TYPE: ${{ secrets.GOOGLE_TYPE }} + TF_VAR_GOOGLE_PROJECT_ID: ${{ secrets.GOOGLE_PROJECT_ID }} + TF_VAR_GOOGLE_PRIVATE_KEY_ID: ${{ secrets.GOOGLE_PRIVATE_KEY_ID }} + TF_VAR_GOOGLE_PRIVATE_KEY: ${{ secrets.GOOGLE_PRIVATE_KEY }} + TF_VAR_GOOGLE_CLIENT_EMAIL: ${{ secrets.GOOGLE_CLIENT_EMAIL }} + TF_VAR_GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + TF_VAR_GOOGLE_AUTH_URI: ${{ secrets.GOOGLE_AUTH_URI }} + TF_VAR_GOOGLE_TOKEN_URI: ${{ secrets.GOOGLE_TOKEN_URI }} + TF_VAR_GOOGLE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.GOOGLE_AUTH_PROVIDER_X509_CERT_URL }} + TF_VAR_GOOGLE_CLIENT_X509_CERT_URL: ${{ secrets.GOOGLE_CLIENT_X509_CERT_URL }} + TF_VAR_GOOGLE_UNIVERSE_DOMAIN: ${{ secrets.GOOGLE_UNIVERSE_DOMAIN }} + # On push to "main", build or change infrastructure according to Terraform configuration files # Note: It is recommended to set up a required "strict" status check in your repository for "Terraform Cloud". See the documentation on "strict" required status checks for more information: https://help.github.com/en/github/administering-a-repository/types-of-required-status-checks - name: Terraform Apply run: terraform apply -auto-approve -input=false env: GOOGLE_CREDENTIALS: ${{ secrets.GCP_CREDENTIALS }} + TF_VAR_MONGO_URI: ${{ secrets.MONGO_URI }} + TF_VAR_GOOGLE_TYPE: ${{ secrets.GOOGLE_TYPE }} + TF_VAR_GOOGLE_PROJECT_ID: ${{ secrets.GOOGLE_PROJECT_ID }} + TF_VAR_GOOGLE_PRIVATE_KEY_ID: ${{ secrets.GOOGLE_PRIVATE_KEY_ID }} + TF_VAR_GOOGLE_PRIVATE_KEY: ${{ secrets.GOOGLE_PRIVATE_KEY }} + TF_VAR_GOOGLE_CLIENT_EMAIL: ${{ secrets.GOOGLE_CLIENT_EMAIL }} + TF_VAR_GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} + TF_VAR_GOOGLE_AUTH_URI: ${{ secrets.GOOGLE_AUTH_URI }} + TF_VAR_GOOGLE_TOKEN_URI: ${{ secrets.GOOGLE_TOKEN_URI }} + TF_VAR_GOOGLE_AUTH_PROVIDER_X509_CERT_URL: ${{ secrets.GOOGLE_AUTH_PROVIDER_X509_CERT_URL }} + TF_VAR_GOOGLE_CLIENT_X509_CERT_URL: ${{ secrets.GOOGLE_CLIENT_X509_CERT_URL }} + TF_VAR_GOOGLE_UNIVERSE_DOMAIN: ${{ secrets.GOOGLE_UNIVERSE_DOMAIN }} diff --git a/.gitignore b/.gitignore index 7f81733..871f6f7 100644 --- a/.gitignore +++ b/.gitignore @@ -160,4 +160,7 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ -.terraform/ \ No newline at end of file +.terraform/ +.DS_Store + +set_google_env.sh \ No newline at end of file diff --git a/datasets/dataset_info.json b/datasets/dataset_info.json index cdcddac..a3e6506 100644 --- a/datasets/dataset_info.json +++ b/datasets/dataset_info.json @@ -25,6 +25,20 @@ "num_columns": 9, "columns": "mpg,cylinders,displacement,horsepower,weight,acceleration,model year,origin,car name" } + }, + "harii": { + "test1": { + "description": "test1", + "num_rows": 420, + "num_columns": 10, + "columns": "Track,Position,No,Driver,Team,Starting Grid,Laps,Total Time/Gap/Retirement,Points,Fastest Lap" + }, + "testrandom": { + "description": "big shaq", + "num_rows": 150, + "num_columns": 8, + "columns": "Tech_Cat,Target,MPSS,Week,Operator,Infra,ValidationList,CallTypeJson" + } } }, "global_data": { diff --git a/harii/test1.csv b/harii/test1.csv new file mode 100644 index 0000000..e6d75ad --- /dev/null +++ b/harii/test1.csv @@ -0,0 +1,421 @@ +Track,Position,No,Driver,Team,Starting Grid,Laps,Total Time/Gap/Retirement,Points,Fastest Lap +Australia,1,77,Valtteri Bottas,Mercedes,2,58,1:25:27,26,Yes +Australia,2,44,Lewis Hamilton,Mercedes,1,58,+20.886,18,No +Australia,3,33,Max Verstappen,Red Bull Racing Honda,4,58,+22.520,15,No +Australia,4,5,Sebastian Vettel,Ferrari,3,58,+57.109,12,No +Australia,5,16,Charles Leclerc,Ferrari,5,58,+58.230,10,No +Australia,6,20,Kevin Magnussen,Haas Ferrari,7,58,+87.156,8,No +Australia,7,27,Nico Hulkenberg,Renault,11,57,+1 lap,6,No +Australia,8,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,9,57,+1 lap,4,No +Australia,9,18,Lance Stroll,Racing Point BWT Mercedes,16,57,+1 lap,2,No +Australia,10,26,Daniil Kvyat,Scuderia Toro Rosso Honda,15,57,+1 lap,1,No +Australia,11,10,Pierre Gasly,Red Bull Racing Honda,17,57,+1 lap,0,No +Australia,12,4,Lando Norris,McLaren Renault,8,57,+1 lap,0,No +Australia,13,11,Sergio Perez,Racing Point BWT Mercedes,10,57,+1 lap,0,No +Australia,14,23,Alexander Albon,Scuderia Toro Rosso Honda,13,57,+1 lap,0,No +Australia,15,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,14,57,+1 lap,0,No +Australia,16,63,George Russell,Williams Mercedes,19,56,+2 laps,0,No +Australia,17,88,Robert Kubica,Williams Mercedes,20,55,+3 laps,0,No +Australia,NC,8,Romain Grosjean,Haas Ferrari,6,29,DNF,0,No +Australia,NC,3,Daniel Ricciardo,Renault,12,28,DNF,0,No +Australia,NC,55,Carlos Sainz,McLaren Renault,18,9,DNF,0,No +Bahrain,1,44,Lewis Hamilton,Mercedes,3,57,1:34:21,25,No +Bahrain,2,77,Valtteri Bottas,Mercedes,4,57,+2.980,18,No +Bahrain,3,16,Charles Leclerc,Ferrari,1,57,+6.131,16,Yes +Bahrain,4,33,Max Verstappen,Red Bull Racing Honda,5,57,+6.408,12,No +Bahrain,5,5,Sebastian Vettel,Ferrari,2,57,+36.068,10,No +Bahrain,6,4,Lando Norris,McLaren Renault,9,57,+45.754,8,No +Bahrain,7,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,8,57,+47.470,6,No +Bahrain,8,10,Pierre Gasly,Red Bull Racing Honda,13,57,+58.094,4,No +Bahrain,9,23,Alexander Albon,Scuderia Toro Rosso Honda,12,57,+62.697,2,No +Bahrain,10,11,Sergio Perez,Racing Point BWT Mercedes,14,57,+63.696,1,No +Bahrain,11,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,16,57,+64.599,0,No +Bahrain,12,26,Daniil Kvyat,Scuderia Toro Rosso Honda,15,56,+1 lap,0,No +Bahrain,13,20,Kevin Magnussen,Haas Ferrari,6,56,+1 lap,0,No +Bahrain,14,18,Lance Stroll,Racing Point BWT Mercedes,18,56,+1 lap,0,No +Bahrain,15,63,George Russell,Williams Mercedes,19,56,+1 lap,0,No +Bahrain,16,88,Robert Kubica,Williams Mercedes,20,55,+2 laps,0,No +Bahrain,17,27,Nico Hulkenberg,Renault,17,53,DNF,0,No +Bahrain,18,3,Daniel Ricciardo,Renault,10,53,DNF,0,No +Bahrain,19,55,Carlos Sainz,McLaren Renault,7,53,DNF,0,No +Bahrain,NC,8,Romain Grosjean,Haas Ferrari,11,16,DNF,0,No +China,1,44,Lewis Hamilton,Mercedes,2,56,1:32:06,25,No +China,2,77,Valtteri Bottas,Mercedes,1,56,+6.552,18,No +China,3,5,Sebastian Vettel,Ferrari,3,56,+13.744,15,No +China,4,33,Max Verstappen,Red Bull Racing Honda,5,56,+27.627,12,No +China,5,16,Charles Leclerc,Ferrari,4,56,+31.276,10,No +China,6,10,Pierre Gasly,Red Bull Racing Honda,6,56,+89.307,9,Yes +China,7,3,Daniel Ricciardo,Renault,7,55,+1 lap,6,No +China,8,11,Sergio Perez,Racing Point BWT Mercedes,12,55,+1 lap,4,No +China,9,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,13,55,+1 lap,2,No +China,10,23,Alexander Albon,Scuderia Toro Rosso Honda,20,55,+1 lap,1,No +China,11,8,Romain Grosjean,Haas Ferrari,10,55,+1 lap,0,No +China,12,18,Lance Stroll,Racing Point BWT Mercedes,16,55,+1 lap,0,No +China,13,20,Kevin Magnussen,Haas Ferrari,9,55,+1 lap,0,No +China,14,55,Carlos Sainz,McLaren Renault,14,55,+1 lap,0,No +China,15,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,19,55,+1 lap,0,No +China,16,63,George Russell,Williams Mercedes,17,54,+2 laps,0,No +China,17,88,Robert Kubica,Williams Mercedes,18,54,+2 laps,0,No +China,18,4,Lando Norris,McLaren Renault,15,50,DNF,0,No +China,NC,26,Daniil Kvyat,Scuderia Toro Rosso Honda,11,41,DNF,0,No +China,NC,27,Nico Hulkenberg,Renault,8,16,DNF,0,No +Azerbaijan,1,77,Valtteri Bottas,Mercedes,1,51,1:31:53,25,No +Azerbaijan,2,44,Lewis Hamilton,Mercedes,2,51,+1.524,18,No +Azerbaijan,3,5,Sebastian Vettel,Ferrari,3,51,+11.739,15,No +Azerbaijan,4,33,Max Verstappen,Red Bull Racing Honda,4,51,+17.493,12,No +Azerbaijan,5,16,Charles Leclerc,Ferrari,8,51,+69.107,11,Yes +Azerbaijan,6,11,Sergio Perez,Racing Point BWT Mercedes,5,51,+76.416,8,No +Azerbaijan,7,55,Carlos Sainz,McLaren Renault,9,51,+83.826,6,No +Azerbaijan,8,4,Lando Norris,McLaren Renault,7,51,+100.268,4,No +Azerbaijan,9,18,Lance Stroll,Racing Point BWT Mercedes,13,51,+103.816,2,No +Azerbaijan,10,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,19,50,+1 lap,1,No +Azerbaijan,11,23,Alexander Albon,Scuderia Toro Rosso Honda,11,50,+1 lap,0,No +Azerbaijan,12,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,17,50,+1 lap,0,No +Azerbaijan,13,20,Kevin Magnussen,Haas Ferrari,12,50,+1 lap,0,No +Azerbaijan,14,27,Nico Hulkenberg,Renault,15,50,+1 lap,0,No +Azerbaijan,15,63,George Russell,Williams Mercedes,16,49,+2 laps,0,No +Azerbaijan,16,88,Robert Kubica,Williams Mercedes,18,49,+2 laps,0,No +Azerbaijan,NC,10,Pierre Gasly,Red Bull Racing Honda,20,38,DNF,0,No +Azerbaijan,NC,8,Romain Grosjean,Haas Ferrari,14,38,DNF,0,No +Azerbaijan,NC,26,Daniil Kvyat,Scuderia Toro Rosso Honda,6,33,DNF,0,No +Azerbaijan,NC,3,Daniel Ricciardo,Renault,10,31,DNF,0,No +Spain,1,44,Lewis Hamilton,Mercedes,2,66,1:35:50,26,Yes +Spain,2,77,Valtteri Bottas,Mercedes,1,66,+4.074,18,No +Spain,3,33,Max Verstappen,Red Bull Racing Honda,4,66,+7.679,15,No +Spain,4,5,Sebastian Vettel,Ferrari,3,66,+9.167,12,No +Spain,5,16,Charles Leclerc,Ferrari,5,66,+13.361,10,No +Spain,6,10,Pierre Gasly,Red Bull Racing Honda,6,66,+19.576,8,No +Spain,7,20,Kevin Magnussen,Haas Ferrari,8,66,+28.159,6,No +Spain,8,55,Carlos Sainz,McLaren Renault,12,66,+32.342,4,No +Spain,9,26,Daniil Kvyat,Scuderia Toro Rosso Honda,9,66,+33.056,2,No +Spain,10,8,Romain Grosjean,Haas Ferrari,7,66,+34.641,1,No +Spain,11,23,Alexander Albon,Scuderia Toro Rosso Honda,11,66,+35.445,0,No +Spain,12,3,Daniel Ricciardo,Renault,13,66,+36.758,0,No +Spain,13,27,Nico Hulkenberg,Renault,20,66,+39.241,0,No +Spain,14,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,14,66,+41.803,0,No +Spain,15,11,Sergio Perez,Racing Point BWT Mercedes,15,66,+46.877,0,No +Spain,16,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,18,66,+47.691,0,No +Spain,17,63,George Russell,Williams Mercedes,19,65,+1 lap,0,No +Spain,18,88,Robert Kubica,Williams Mercedes,17,65,+1 lap,0,No +Spain,NC,18,Lance Stroll,Racing Point BWT Mercedes,16,44,DNF,0,No +Spain,NC,4,Lando Norris,McLaren Renault,10,44,DNF,0,No +Monaco,1,44,Lewis Hamilton,Mercedes,1,78,1:43:28,25,No +Monaco,2,5,Sebastian Vettel,Ferrari,4,78,+2.602,18,No +Monaco,3,77,Valtteri Bottas,Mercedes,2,78,+3.162,15,No +Monaco,4,33,Max Verstappen,Red Bull Racing Honda,3,78,+5.537,12,No +Monaco,5,10,Pierre Gasly,Red Bull Racing Honda,8,78,+9.946,11,Yes +Monaco,6,55,Carlos Sainz,McLaren Renault,9,78,+53.454,8,No +Monaco,7,26,Daniil Kvyat,Scuderia Toro Rosso Honda,7,78,+54.574,6,No +Monaco,8,23,Alexander Albon,Scuderia Toro Rosso Honda,10,78,+55.200,4,No +Monaco,9,3,Daniel Ricciardo,Renault,6,78,+60.894,2,No +Monaco,10,8,Romain Grosjean,Haas Ferrari,13,78,+61.034,1,No +Monaco,11,4,Lando Norris,McLaren Renault,12,78,+66.801,0,No +Monaco,12,11,Sergio Perez,Racing Point BWT Mercedes,16,77,+1 lap,0,No +Monaco,13,27,Nico Hulkenberg,Renault,11,77,+1 lap,0,No +Monaco,14,20,Kevin Magnussen,Haas Ferrari,5,77,+1 lap,0,No +Monaco,15,63,George Russell,Williams Mercedes,19,77,+1 lap,0,No +Monaco,16,18,Lance Stroll,Racing Point BWT Mercedes,17,77,+1 lap,0,No +Monaco,17,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,14,77,+1 lap,0,No +Monaco,18,88,Robert Kubica,Williams Mercedes,20,77,+1 lap,0,No +Monaco,19,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,18,76,+2 laps,0,No +Monaco,NC,16,Charles Leclerc,Ferrari,15,16,DNF,0,No +Canada,1,44,Lewis Hamilton,Mercedes,2,70,1:29:07,25,No +Canada,2,5,Sebastian Vettel,Ferrari,1,70,+3.658,18,No +Canada,3,16,Charles Leclerc,Ferrari,3,70,+4.696,15,No +Canada,4,77,Valtteri Bottas,Mercedes,6,70,+51.043,13,Yes +Canada,5,33,Max Verstappen,Red Bull Racing Honda,9,70,+57.655,10,No +Canada,6,3,Daniel Ricciardo,Renault,4,69,+1 lap,8,No +Canada,7,27,Nico Hulkenberg,Renault,7,69,+1 lap,6,No +Canada,8,10,Pierre Gasly,Red Bull Racing Honda,5,69,+1 lap,4,No +Canada,9,18,Lance Stroll,Racing Point BWT Mercedes,17,69,+1 lap,2,No +Canada,10,26,Daniil Kvyat,Scuderia Toro Rosso Honda,10,69,+1 lap,1,No +Canada,11,55,Carlos Sainz,McLaren Renault,11,69,+1 lap,0,No +Canada,12,11,Sergio Perez,Racing Point BWT Mercedes,15,69,+1 lap,0,No +Canada,13,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,12,69,+1 lap,0,No +Canada,14,8,Romain Grosjean,Haas Ferrari,14,69,+1 lap,0,No +Canada,15,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,16,69,+1 lap,0,No +Canada,16,63,George Russell,Williams Mercedes,18,68,+2 laps,0,No +Canada,17,20,Kevin Magnussen,Haas Ferrari,20,68,+2 laps,0,No +Canada,18,88,Robert Kubica,Williams Mercedes,19,67,+3 laps,0,No +Canada,NC,23,Alexander Albon,Scuderia Toro Rosso Honda,13,59,DNF,0,No +Canada,NC,4,Lando Norris,McLaren Renault,8,8,DNF,0,No +France,1,44,Lewis Hamilton,Mercedes,1,53,1:24:31,25,No +France,2,77,Valtteri Bottas,Mercedes,2,53,+18.056,18,No +France,3,16,Charles Leclerc,Ferrari,3,53,+18.985,15,No +France,4,33,Max Verstappen,Red Bull Racing Honda,4,53,+34.905,12,No +France,5,5,Sebastian Vettel,Ferrari,7,53,+62.796,11,Yes +France,6,55,Carlos Sainz,McLaren Renault,6,53,+95.462,8,No +France,7,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,12,52,+1 lap,6,No +France,8,27,Nico Hulkenberg,Renault,13,52,+1 lap,4,No +France,9,4,Lando Norris,McLaren Renault,5,52,+1 lap,2,No +France,10,10,Pierre Gasly,Red Bull Racing Honda,9,52,+1 lap,1,No +France,11,3,Daniel Ricciardo,Renault,8,52,+1 lap,0,No +France,12,11,Sergio Perez,Racing Point BWT Mercedes,14,52,+1 lap,0,No +France,13,18,Lance Stroll,Racing Point BWT Mercedes,17,52,+1 lap,0,No +France,14,26,Daniil Kvyat,Scuderia Toro Rosso Honda,19,52,+1 lap,0,No +France,15,23,Alexander Albon,Scuderia Toro Rosso Honda,11,52,+1 lap,0,No +France,16,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,10,52,+1 lap,0,No +France,17,20,Kevin Magnussen,Haas Ferrari,15,52,+1 lap,0,No +France,18,88,Robert Kubica,Williams Mercedes,18,51,+2 laps,0,No +France,19,63,George Russell,Williams Mercedes,20,51,+2 laps,0,No +France,NC,8,Romain Grosjean,Haas Ferrari,16,44,DNF,0,No +Austria,1,33,Max Verstappen,Red Bull Racing Honda,2,71,1:22:02,26,Yes +Austria,2,16,Charles Leclerc,Ferrari,1,71,+2.724,18,No +Austria,3,77,Valtteri Bottas,Mercedes,3,71,+18.960,15,No +Austria,4,5,Sebastian Vettel,Ferrari,9,71,+19.610,12,No +Austria,5,44,Lewis Hamilton,Mercedes,4,71,+22.805,10,No +Austria,6,4,Lando Norris,McLaren Renault,5,70,+1 lap,8,No +Austria,7,10,Pierre Gasly,Red Bull Racing Honda,8,70,+1 lap,6,No +Austria,8,55,Carlos Sainz,McLaren Renault,19,70,+1 lap,4,No +Austria,9,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,6,70,+1 lap,2,No +Austria,10,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,7,70,+1 lap,1,No +Austria,11,11,Sergio Perez,Racing Point BWT Mercedes,13,70,+1 lap,0,No +Austria,12,3,Daniel Ricciardo,Renault,12,70,+1 lap,0,No +Austria,13,27,Nico Hulkenberg,Renault,15,70,+1 lap,0,No +Austria,14,18,Lance Stroll,Racing Point BWT Mercedes,14,70,+1 lap,0,No +Austria,15,23,Alexander Albon,Scuderia Toro Rosso Honda,18,70,+1 lap,0,No +Austria,16,8,Romain Grosjean,Haas Ferrari,11,70,+1 lap,0,No +Austria,17,26,Daniil Kvyat,Scuderia Toro Rosso Honda,16,70,+1 lap,0,No +Austria,18,63,George Russell,Williams Mercedes,20,69,+2 laps,0,No +Austria,19,20,Kevin Magnussen,Haas Ferrari,10,69,+2 laps,0,No +Austria,20,88,Robert Kubica,Williams Mercedes,17,68,+3 laps,0,No +Great Britain,1,44,Lewis Hamilton,Mercedes,2,52,1:21:08,26,Yes +Great Britain,2,77,Valtteri Bottas,Mercedes,1,52,+24.928,18,No +Great Britain,3,16,Charles Leclerc,Ferrari,3,52,+30.117,15,No +Great Britain,4,10,Pierre Gasly,Red Bull Racing Honda,5,52,+34.692,12,No +Great Britain,5,33,Max Verstappen,Red Bull Racing Honda,4,52,+39.458,10,No +Great Britain,6,55,Carlos Sainz,McLaren Renault,13,52,+53.639,8,No +Great Britain,7,3,Daniel Ricciardo,Renault,7,52,+54.401,6,No +Great Britain,8,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,12,52,+65.540,4,No +Great Britain,9,26,Daniil Kvyat,Scuderia Toro Rosso Honda,17,52,+66.720,2,No +Great Britain,10,27,Nico Hulkenberg,Renault,10,52,+72.733,1,No +Great Britain,11,4,Lando Norris,McLaren Renault,8,52,+74.281,0,No +Great Britain,12,23,Alexander Albon,Scuderia Toro Rosso Honda,9,52,+75.617,0,No +Great Britain,13,18,Lance Stroll,Racing Point BWT Mercedes,18,52,+81.086,0,No +Great Britain,14,63,George Russell,Williams Mercedes,19,51,+1 lap,0,No +Great Britain,15,88,Robert Kubica,Williams Mercedes,20,51,+1 lap,0,No +Great Britain,16,5,Sebastian Vettel,Ferrari,6,51,+1 lap,0,No +Great Britain,17,11,Sergio Perez,Racing Point BWT Mercedes,15,51,+1 lap,0,No +Great Britain,NC,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,11,18,DNF,0,No +Great Britain,NC,8,Romain Grosjean,Haas Ferrari,14,9,DNF,0,No +Great Britain,NC,20,Kevin Magnussen,Haas Ferrari,16,6,DNF,0,No +Germany,1,33,Max Verstappen,Red Bull Racing Honda,2,64,1:44:31,26,Yes +Germany,2,5,Sebastian Vettel,Ferrari,20,64,+7.333,18,No +Germany,3,26,Daniil Kvyat,Scuderia Toro Rosso Honda,14,64,+8.305,15,No +Germany,4,18,Lance Stroll,Racing Point BWT Mercedes,15,64,+8.966,12,No +Germany,5,55,Carlos Sainz,McLaren Renault,7,64,+9.583,10,No +Germany,6,23,Alexander Albon,Scuderia Toro Rosso Honda,16,64,+10.052,8,No +Germany,7,8,Romain Grosjean,Haas Ferrari,6,64,+16.838,6,No +Germany,8,20,Kevin Magnussen,Haas Ferrari,12,64,+18.765,4,No +Germany,9,44,Lewis Hamilton,Mercedes,1,64,+19.667,2,No +Germany,10,88,Robert Kubica,Williams Mercedes,18,64,+24.987,1,No +Germany,11,63,George Russell,Williams Mercedes,17,64,+26.404,0,No +Germany,12,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,5,64,+42.214,0,No +Germany,13,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,11,64,+43.849,0,No +Germany,14,10,Pierre Gasly,Red Bull Racing Honda,4,61,DNF,0,No +Germany,NC,77,Valtteri Bottas,Mercedes,3,56,DNF,0,No +Germany,NC,27,Nico Hulkenberg,Renault,9,39,DNF,0,No +Germany,NC,16,Charles Leclerc,Ferrari,10,27,DNF,0,No +Germany,NC,4,Lando Norris,McLaren Renault,19,25,DNF,0,No +Germany,NC,3,Daniel Ricciardo,Renault,13,13,DNF,0,No +Germany,NC,11,Sergio Perez,Racing Point BWT Mercedes,8,1,DNF,0,No +Hungary,1,44,Lewis Hamilton,Mercedes,3,70,1:35:04,25,No +Hungary,2,33,Max Verstappen,Red Bull Racing Honda,1,70,+17.796,19,Yes +Hungary,3,5,Sebastian Vettel,Ferrari,5,70,+61.433,15,No +Hungary,4,16,Charles Leclerc,Ferrari,4,70,+65.250,12,No +Hungary,5,55,Carlos Sainz,McLaren Renault,8,69,+1 lap,10,No +Hungary,6,10,Pierre Gasly,Red Bull Racing Honda,6,69,+1 lap,8,No +Hungary,7,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,10,69,+1 lap,6,No +Hungary,8,77,Valtteri Bottas,Mercedes,2,69,+1 lap,4,No +Hungary,9,4,Lando Norris,McLaren Renault,7,69,+1 lap,2,No +Hungary,10,23,Alexander Albon,Scuderia Toro Rosso Honda,12,69,+1 lap,1,No +Hungary,11,11,Sergio Perez,Racing Point BWT Mercedes,16,69,+1 lap,0,No +Hungary,12,27,Nico Hulkenberg,Renault,11,69,+1 lap,0,No +Hungary,13,20,Kevin Magnussen,Haas Ferrari,14,69,+1 lap,0,No +Hungary,14,3,Daniel Ricciardo,Renault,20,69,+1 lap,0,No +Hungary,15,26,Daniil Kvyat,Scuderia Toro Rosso Honda,13,68,+2 laps,0,No +Hungary,16,63,George Russell,Williams Mercedes,15,68,+2 laps,0,No +Hungary,17,18,Lance Stroll,Racing Point BWT Mercedes,18,68,+2 laps,0,No +Hungary,18,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,17,68,+2 laps,0,No +Hungary,19,88,Robert Kubica,Williams Mercedes,19,67,+3 laps,0,No +Hungary,NC,8,Romain Grosjean,Haas Ferrari,9,49,DNF,0,No +Belgium,1,16,Charles Leclerc,Ferrari,1,44,1:23:46,25,No +Belgium,2,44,Lewis Hamilton,Mercedes,3,44,+0.981,18,No +Belgium,3,77,Valtteri Bottas,Mercedes,4,44,+12.585,15,No +Belgium,4,5,Sebastian Vettel,Ferrari,2,44,+26.422,13,Yes +Belgium,5,23,Alexander Albon,Red Bull Racing Honda,17,44,+81.325,10,No +Belgium,6,11,Sergio Perez,Racing Point BWT Mercedes,7,44,+84.448,8,No +Belgium,7,26,Daniil Kvyat,Scuderia Toro Rosso Honda,19,44,+89.657,6,No +Belgium,8,27,Nico Hulkenberg,Renault,12,44,+106.639,4,No +Belgium,9,10,Pierre Gasly,Scuderia Toro Rosso Honda,13,44,+109.168,2,No +Belgium,10,18,Lance Stroll,Racing Point BWT Mercedes,16,44,+109.838,1,No +Belgium,11,4,Lando Norris,McLaren Renault,11,43,DNF,0,No +Belgium,12,20,Kevin Magnussen,Haas Ferrari,8,43,+1 lap,0,No +Belgium,13,8,Romain Grosjean,Haas Ferrari,9,43,+1 lap,0,No +Belgium,14,3,Daniel Ricciardo,Renault,10,43,+1 lap,0,No +Belgium,15,63,George Russell,Williams Mercedes,14,43,+1 lap,0,No +Belgium,16,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,6,43,+1 lap,0,No +Belgium,17,88,Robert Kubica,Williams Mercedes,20,43,+1 lap,0,No +Belgium,18,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,18,42,DNF,0,No +Belgium,NC,55,Carlos Sainz,McLaren Renault,15,1,DNF,0,No +Belgium,NC,33,Max Verstappen,Red Bull Racing Honda,5,0,DNF,0,No +Italy,1,16,Charles Leclerc,Ferrari,1,53,1:15:27,25,No +Italy,2,77,Valtteri Bottas,Mercedes,3,53,+0.835,18,No +Italy,3,44,Lewis Hamilton,Mercedes,2,53,+35.199,16,Yes +Italy,4,3,Daniel Ricciardo,Renault,5,53,+45.515,12,No +Italy,5,27,Nico Hulkenberg,Renault,6,53,+58.165,10,No +Italy,6,23,Alexander Albon,Red Bull Racing Honda,8,53,+59.315,8,No +Italy,7,11,Sergio Perez,Racing Point BWT Mercedes,18,53,+73.802,6,No +Italy,8,33,Max Verstappen,Red Bull Racing Honda,19,53,+74.492,4,No +Italy,9,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,10,52,+1 lap,2,No +Italy,10,4,Lando Norris,McLaren Renault,16,52,+1 lap,1,No +Italy,11,10,Pierre Gasly,Scuderia Toro Rosso Honda,17,52,+1 lap,0,No +Italy,12,18,Lance Stroll,Racing Point BWT Mercedes,9,52,+1 lap,0,No +Italy,13,5,Sebastian Vettel,Ferrari,4,52,+1 lap,0,No +Italy,14,63,George Russell,Ferrari,14,52,+1 lap,0,No +Italy,15,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,20,52,+1 lap,0,No +Italy,16,8,Romain Grosjean,Haas Ferrari,13,52,+1 lap,0,No +Italy,17,88,Robert Kubica,Williams Mercedes,15,51,+2 laps,0,No +Italy,NC,20,Kevin Magnussen,Haas Ferrari,11,43,DNF,0,No +Italy,NC,26,Daniil Kvyat,Scuderia Toro Rosso Honda,12,29,DNF,0,No +Italy,NC,55,Carlos Sainz,McLaren Renault,7,27,DNF,0,No +Singapore,1,5,Sebastian Vettel,Ferrari,3,61,1:58:34,25,No +Singapore,2,16,Charles Leclerc,Ferrari,1,61,+2.641,18,No +Singapore,3,33,Max Verstappen,Red Bull Racing Honda,4,61,+3.821,15,No +Singapore,4,44,Lewis Hamilton,Mercedes,2,61,+4.608,12,No +Singapore,5,77,Valtteri Bottas,Mercedes,5,61,+6.119,10,No +Singapore,6,23,Alexander Albon,Red Bull Racing Honda,6,61,+11.663,8,No +Singapore,7,4,Lando Norris,McLaren Renault,9,61,+14.769,6,No +Singapore,8,10,Pierre Gasly,Scuderia Toro Rosso Honda,11,61,+15.547,4,No +Singapore,9,27,Nico Hulkenberg,Renault,8,61,+16.718,2,No +Singapore,10,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,10,61,+27.855,1,No +Singapore,11,8,Romain Grosjean,Haas Ferrari,17,61,+35.436,0,No +Singapore,12,55,Carlos Sainz,McLaren Renault,7,61,+35.974,0,No +Singapore,13,18,Lance Stroll,Racing Point BWT Mercedes,16,61,+36.419,0,No +Singapore,14,3,Daniel Ricciardo,Renault,20,61,+37.660,0,No +Singapore,15,26,Daniil Kvyat,Scuderia Toro Rosso Honda,14,61,+38.178,0,No +Singapore,16,88,Robert Kubica,Williams Mercedes,19,61,+47.024,0,No +Singapore,17,20,Kevin Magnussen,Haas Ferrari,13,61,+86.522,0,Yes +Singapore,NC,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,12,49,DNF,0,No +Singapore,NC,11,Sergio Perez,Racing Point BWT Mercedes,15,42,DNF,0,No +Singapore,NC,63,George Russell,Williams Mercedes,18,34,DNF,0,No +Russia,1,44,Lewis Hamilton,Mercedes,2,53,1:33:39,26,Yes +Russia,2,77,Valtteri Bottas,Mercedes,4,53,+3.829,18,No +Russia,3,16,Charles Leclerc,Ferrari,1,53,+5.212,15,No +Russia,4,33,Max Verstappen,Red Bull Racing Honda,9,53,+14.210,12,No +Russia,5,23,Alexander Albon,Red Bull Racing Honda,20,53,+38.348,10,No +Russia,6,55,Carlos Sainz,McLaren Renault,5,53,+45.889,8,No +Russia,7,11,Sergio Perez,Racing Point BWT Mercedes,11,53,+48.728,6,No +Russia,8,4,Lando Norris,McLaren Renault,7,53,+57.749,4,No +Russia,9,20,Kevin Magnussen,Haas Ferrari,13,53,+58.779,2,No +Russia,10,27,Nico Hulkenberg,Renault,6,53,+59.841,1,No +Russia,11,18,Lance Stroll,Racing Point BWT Mercedes,14,53,+60.821,0,No +Russia,12,26,Daniil Kvyat,Scuderia Toro Rosso Honda,19,53,+62.496,0,No +Russia,13,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,15,53,+68.910,0,No +Russia,14,10,Pierre Gasly,Scuderia Toro Rosso Honda,16,53,+70.076,0,No +Russia,15,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,12,53,+73.346,0,No +Russia,NC,88,Robert Kubica,Williams Mercedes,18,28,DNF,0,No +Russia,NC,63,George Russell,Williams Mercedes,17,27,DNF,0,No +Russia,NC,5,Sebastian Vettel,Ferrari,3,26,DNF,0,No +Russia,NC,3,Daniel Ricciardo,Renault,10,24,DNF,0,No +Russia,NC,8,Romain Grosjean,Haas Ferrari,8,0,DNF,0,No +Japan,1,77,Valtteri Bottas,Mercedes,3,52,1:21:47,25,No +Japan,2,5,Sebastian Vettel,Ferrari,1,52,+13.343,18,No +Japan,3,44,Lewis Hamilton,Mercedes,4,52,+13.858,16,Yes +Japan,4,23,Alexander Albon,Red Bull Racing Honda,6,52,+59.537,12,No +Japan,5,55,Carlos Sainz,McLaren Renault,7,52,+69.101,10,No +Japan,DQ,3,Daniel Ricciardo,Renault,16,51,+1 lap,0,No +Japan,6,16,Charles Leclerc,Ferrari,2,51,+1 lap,8,No +Japan,7,10,Pierre Gasly,Scuderia Toro Rosso Honda,9,51,+1 lap,6,No +Japan,8,11,Sergio Perez,Racing Point BWT Mercedes,17,51,+1 lap,4,No +Japan,DQ,27,Nico Hulkenberg,Renault,15,51,+1 lap,0,No +Japan,9,18,Lance Stroll,Racing Point BWT Mercedes,12,51,+1 lap,2,No +Japan,10,26,Daniil Kvyat,Scuderia Toro Rosso Honda,14,51,+1 lap,1,No +Japan,11,4,Lando Norris,McLaren Renault,8,51,+1 lap,0,No +Japan,12,7,Kimi Raikkönen,Haas Ferrari,13,51,+1 lap,0,No +Japan,13,8,Romain Grosjean,Haas Ferrari,10,51,+1 lap,0,No +Japan,14,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,11,51,+1 lap,0,No +Japan,15,20,Kevin Magnussen,Haas Ferrari,19,51,+1 lap,0,No +Japan,16,63,George Russell,Williams Mercedes,18,50,+2 laps,0,No +Japan,17,88,Robert Kubica,Williams Mercedes,20,50,+2 laps,0,No +Japan,NC,33,Max Verstappen,Red Bull Racing Honda,5,14,DNF,0,No +Mexico,1,44,Lewis Hamilton,Mercedes,3,71,1:36:49,25,No +Mexico,2,5,Sebastian Vettel,Ferrari,2,71,+1.766,18,No +Mexico,3,77,Valtteri Bottas,Mercedes,6,71,+3.553,15,No +Mexico,4,16,Charles Leclerc,Ferrari,1,71,+6.368,13,Yes +Mexico,5,23,Alexander Albon,Red Bull Racing Honda,5,71,+21.399,10,No +Mexico,6,33,Max Verstappen,Red Bull Racing Honda,4,71,+68.807,8,No +Mexico,7,11,Sergio Perez,Racing Point BWT Mercedes,11,71,+73.819,6,No +Mexico,8,3,Daniel Ricciardo,Renault,13,71,+74.924,4,No +Mexico,9,10,Pierre Gasly,Scuderia Toro Rosso Honda,10,70,+1 lap,2,No +Mexico,10,27,Nico Hulkenberg,Renault,12,70,+1 lap,1,No +Mexico,11,26,Daniil Kvyat,Scuderia Toro Rosso Honda,9,70,+1 lap,0,No +Mexico,12,18,Lance Stroll,Racing Point BWT Mercedes,16,70,+1 lap,0,No +Mexico,13,55,Carlos Sainz,McLaren Renault,7,70,+1 lap,0,No +Mexico,14,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,15,70,+1 lap,0,No +Mexico,15,20,Kevin Magnussen,Haas Ferrari,17,69,+2 laps,0,No +Mexico,16,63,George Russell,Williams Mercedes,19,69,+2 laps,0,No +Mexico,17,8,Romain Grosjean,Haas Ferrari,18,69,+2 laps,0,No +Mexico,18,88,Robert Kubica,Williams Mercedes,20,69,+2 laps,0,No +Mexico,NC,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,14,58,DNF,0,No +Mexico,NC,4,Lando Norris,McLaren Renault,8,48,DNF,0,No +United States,1,77,Valtteri Bottas,Mercedes,1,56,1:33:56,25,No +United States,2,44,Lewis Hamilton,Mercedes,5,56,+4.148,18,No +United States,3,33,Max Verstappen,Red Bull Racing Honda,3,56,+5.002,15,No +United States,4,16,Charles Leclerc,Ferrari,4,56,+52.239,13,Yes +United States,5,23,Alexander Albon,Red Bull Racing Honda,6,56,+78.038,10,No +United States,6,3,Daniel Ricciardo,Renault,9,56,+90.366,8,No +United States,7,4,Lando Norris,McLaren Renault,8,56,+90.764,6,No +United States,8,55,Carlos Sainz,McLaren Renault,7,55,+1 lap,4,No +United States,9,27,Nico Hulkenberg,Renault,11,55,+1 lap,2,No +United States,10,11,Sergio Perez,Racing Point BWT Mercedes,20,55,+1 lap,1,No +United States,11,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,17,55,+1 lap,0,No +United States,12,26,Daniil Kvyat,Scuderia Toro Rosso Honda,13,55,+1 lap,0,No +United States,13,18,Lance Stroll,Racing Point BWT Mercedes,14,55,+1 lap,0,No +United States,14,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,16,55,+1 lap,0,No +United States,15,8,Romain Grosjean,Haas Ferrari,15,55,+1 lap,0,No +United States,16,10,Pierre Gasly,Scuderia Toro Rosso Honda,10,54,DNF,0,No +United States,17,63,George Russell,Williams Mercedes,18,54,+2 laps,0,No +United States,18,20,Kevin Magnussen,Haas Ferrari,12,52,DNF,0,No +United States,NC,88,Robert Kubica,Williams Mercedes,19,31,DNF,0,No +United States,NC,5,Sebastian Vettel,Ferrari,2,7,DNF,0,No +Brazil,1,33,Max Verstappen,Red Bull Racing Honda,1,71,1:33:15,25,No +Brazil,2,10,Pierre Gasly,Scuderia Toro Rosso Honda,6,71,+6.077,18,No +Brazil,3,55,Carlos Sainz,McLaren Renault,20,71,+8.896,15,No +Brazil,4,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,8,71,+9.452,12,No +Brazil,5,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,12,71,+10.201,10,No +Brazil,6,3,Daniel Ricciardo,Renault,11,71,+10.541,8,No +Brazil,7,44,Lewis Hamilton,Mercedes,3,71,+11.139,6,No +Brazil,8,4,Lando Norris,McLaren Renault,10,71,+11.204,4,No +Brazil,9,11,Sergio Perez,Racing Point BWT Mercedes,15,71,+11.529,2,No +Brazil,10,26,Daniil Kvyat,Scuderia Toro Rosso Honda,16,71,+11.931,1,No +Brazil,11,20,Kevin Magnussen,Haas Ferrari,9,71,+12.599,0,No +Brazil,12,63,George Russell,Williams Mercedes,18,71,+13.599,0,No +Brazil,13,8,Romain Grosjean,Haas Ferrari,7,71,+14.247,0,No +Brazil,14,23,Alexander Albon,Red Bull Racing Honda,5,71,+14.927,0,No +Brazil,15,27,Nico Hulkenberg,Renault,13,71,+18.059,0,No +Brazil,16,88,Robert Kubica,Williams Mercedes,19,70,+1 lap,0,No +Brazil,17,5,Sebastian Vettel,Ferrari,2,65,DNF,0,No +Brazil,18,16,Charles Leclerc,Ferrari,14,65,DNF,0,No +Brazil,19,18,Lance Stroll,Racing Point BWT Mercedes,17,65,DNF,0,No +Brazil,NC,77,Valtteri Bottas,Mercedes,4,51,DNF,0,Yes +Abu Dhabi,1,44,Lewis Hamilton,Mercedes,1,55,1:34:06,26,Yes +Abu Dhabi,2,33,Max Verstappen,Red Bull Racing Honda,2,55,+16.772,18,No +Abu Dhabi,3,16,Charles Leclerc,Ferrari,3,55,+43.435,15,No +Abu Dhabi,4,77,Valtteri Bottas,Mercedes,20,55,+44.379,12,No +Abu Dhabi,5,5,Sebastian Vettel,Ferrari,4,55,+64.357,10,No +Abu Dhabi,6,23,Alexander Albon,Red Bull Racing Honda,5,55,+69.205,8,No +Abu Dhabi,7,11,Sergio Perez,Racing Point BWT Mercedes,10,54,+1 lap,6,No +Abu Dhabi,8,4,Lando Norris,McLaren Renault,6,54,+1 lap,4,No +Abu Dhabi,9,26,Daniil Kvyat,Scuderia Toro Rosso Honda,13,54,+1 lap,2,No +Abu Dhabi,10,55,Carlos Sainz,McLaren Renault,8,54,+1 lap,1,No +Abu Dhabi,11,3,Daniel Ricciardo,Renault,7,54,+1 lap,0,No +Abu Dhabi,12,27,Nico Hulkenberg,Renault,9,54,+1 lap,0,No +Abu Dhabi,13,7,Kimi Raikkönen,Alfa Romeo Racing Ferrari,17,54,+1 lap,0,No +Abu Dhabi,14,20,Kevin Magnussen,Haas Ferrari,14,54,+1 lap,0,No +Abu Dhabi,15,8,Romain Grosjean,Haas Ferrari,15,54,+1 lap,0,No +Abu Dhabi,16,99,Antonio Giovinazzi,Alfa Romeo Racing Ferrari,16,54,+1 lap,0,No +Abu Dhabi,17,63,George Russell,Williams Mercedes,18,54,+1 lap,0,No +Abu Dhabi,18,10,Pierre Gasly,Scuderia Toro Rosso Honda,11,53,+2 laps,0,No +Abu Dhabi,19,88,Robert Kubica,Williams Mercedes,19,53,+2 laps,0,No +Abu Dhabi,NC,18,Lance Stroll,Racing Point BWT Mercedes,12,45,DNF,0,No \ No newline at end of file diff --git a/harii/testrandom.csv b/harii/testrandom.csv new file mode 100644 index 0000000..8784b76 --- /dev/null +++ b/harii/testrandom.csv @@ -0,0 +1,166 @@ +Tech_Cat,Target,MPSS,Week,Operator,Infra,ValidationList,CallTypeJson +mmW,DE.3.1,DE.3.1-KILLUA,19,ATT,Ericsson,"[ + { + Feature"" : ""2T+2F""", +"Location : ""SFO""",,,,,,, +"Tester : ""Pramod""",,,,,,, +"Date : ""06/22/2023""",,,,,,, +"Validated : ""Yes""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""2F+T""",,,,,,, +"Location : ""Austin""",,,,,,, +"Tester : ""Rohit""",,,,,,, +"Date : ""06/20/2023""",,,,,,, +"Validated: ""Yes""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""3F""",,,,,,, +"Location : """"",,,,,,, +"Tester : """"",,,,,,, +"Date : """"",,,,,,, +"Validated:""No""",,,,,,, +},,,,,,, +"]""","{ + Austin"": {",,,,,, +"VT-VoLTE: ""26","232""",,,,,, +"VT-VoNR: ""10","0""",,,,,, +"VoLTE: ""834","92""",,,,,, +"VoNR: ""60","8""",,,,,, +},,,,,,, +Providence: {,,,,,,, +"VT-VoLTE: ""182","2""",,,,,, +"VoLTE: ""572","36""",,,,,, +},,,,,,, +"}""",,,,,,, +SA,DE.3.1,DE.3.1-KILLUA,19,TMO,Nokia,"[ + { + Feature"" : ""2T+2F""", +"Location : ""SFO""",,,,,,, +"Tester : ""Pramod""",,,,,,, +"Date : ""06/22/2023""",,,,,,, +"Validated : ""Yes""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""2F+T""",,,,,,, +"Location : ""Austin""",,,,,,, +"Tester : ""Rohit""",,,,,,, +"Date : ""06/20/2023""",,,,,,, +"Validated: ""Yes""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""3F""",,,,,,, +"Location : """"",,,,,,, +"Tester : """"",,,,,,, +"Date : """"",,,,,,, +"Validated:""No""",,,,,,, +},,,,,,, +"]""","{ + Austin"": {",,,,,, +"VT-VoLTE: ""26","232""",,,,,, +"VT-VoNR: ""10","0""",,,,,, +"VoLTE: ""834","92""",,,,,, +"VoNR: ""60","8""",,,,,, +},,,,,,, +Providence: {,,,,,,, +"VT-VoLTE: ""182","2""",,,,,, +"VoLTE: ""572","36""",,,,,, +},,,,,,, +"}""",,,,,,, +mmW,DE.3.1,DE.3.1-KILLUA,19,TMO,Samsung,"[ + { + Feature"" : ""3T""", +"Location : ""SFO""",,,,,,, +"Tester : ""Pramod""",,,,,,, +"Date : ""06/22/2023""",,,,,,, +"Validated : ""Yes""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""2F+2T""",,,,,,, +"Location : ""Austin""",,,,,,, +"Tester : ""Rohit""",,,,,,, +"Date : ""06/20/2023""",,,,,,, +"Validated: ""No""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""2T+F""",,,,,,, +"Location : ""San Diego""",,,,,,, +"Tester : ""Parth""",,,,,,, +"Date : ""06/26/2023""",,,,,,, +"Validated:""Yes""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""2F+T""",,,,,,, +"Location : ""San Diego""",,,,,,, +"Tester : ""Parth""",,,,,,, +"Date : ""06/26/2023""",,,,,,, +"Validated:""Yes""",,,,,,, +},,,,,,, +"]""","{ + San Diego"": {",,,,,, +"VT-VoLTE: ""26","232""",,,,,, +"VT-VoNR: ""10","0""",,,,,, +"VoNR: ""60","8""",,,,,, +},,,,,,, +Las Vegas: {,,,,,,, +"VoNR: ""100","2""",,,,,, +},,,,,,, +"}""",,,,,,, +NSA,DE.3.1,DE.3.1-KILLUA,19,ATT,Ericsson,"[ + { + Feature"" : ""Vo-WiFi""", +"Location : ""San Diego""",,,,,,, +"Tester : ""Parth""",,,,,,, +"Date : ""06/30/2023""",,,,,,, +"Validated : ""No""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""7DL CA""",,,,,,, +"Location : ""Austin""",,,,,,, +"Tester : ""Rohit""",,,,,,, +"Date : ""06/20/2023""",,,,,,, +"Validated: ""Yes""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""8CC UL/4CC DL""",,,,,,, +"Location : ""San Diego""",,,,,,, +"Tester : ""Parth""",,,,,,, +"Date : ""06/30/2023""",,,,,,, +"Validated:""Yes""",,,,,,, +},,,,,,, +"]""","{ + San Diego"": {",,,,,, +"VT-VoLTE: ""0","123""",,,,,, +"VT-VoNR: ""123","532""",,,,,, +"VoLTE: ""43","2""",,,,,, +"VoNR: ""324","32""",,,,,, +},,,,,,, +Seattle: {,,,,,,, +"VT-VoLTE: ""12","21""",,,,,, +"VoLTE: ""76","23""",,,,,, +},,,,,,, +"}""",,,,,,, +mmW,DE.3.1,DE.3.1-KILLUA,19,TMO,Ericsson,"[ + { + Feature"" : ""T+F""", +"Location : ""Irvine""",,,,,,, +"Tester : ""Vatsal""",,,,,,, +"Date : ""07/22/2023""",,,,,,, +"Validated : ""No""",,,,,,, +},,,,,,, +{,,,,,,, +"Feature : ""2T+2F""",,,,,,, +"Location : ""Irvine""",,,,,,, +"Tester : ""Vatsal""",,,,,,, +"Date : ""07/20/2023""",,,,,,, +"Validated : ""Yes""",,,,,,, +},,,,,,, +"]""","{ + San Diego"": {",,,,,, +"VT-VoNR: ""789","0""",,,,,, +"VoNR: ""60","8""",,,,,, +},,,,,,, +Irvine: {,,,,,,, +"VoNR: ""132","45""",,,,,, +},,,,,,, +"}""",,,,,,, \ No newline at end of file diff --git a/main.py b/main.py index 323810e..7a09363 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,7 @@ import db from db import insert_training_model,update_model_record, return_training_models import json -from flask import Flask, request, render_template, redirect, session, jsonify +from flask import Flask, request, render_template, redirect, session, jsonify, url_for # from flask_cors import CORS import re import os @@ -37,6 +37,7 @@ scope = [ 'https://www.googleapis.com/auth/drive', + 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive.file' ] @@ -44,115 +45,130 @@ with open(datasets_file_path, 'r') as file: datasets_all_information= json.load(file) +def get_google_credentials_from_env(): + credentials = { + "type": os.getenv("GOOGLE_TYPE"), + "project_id": os.getenv("GOOGLE_PROJECT_ID"), + "private_key_id": os.getenv("GOOGLE_PRIVATE_KEY_ID"), + "private_key": os.getenv("GOOGLE_PRIVATE_KEY"), + "client_email": os.getenv("GOOGLE_CLIENT_EMAIL"), + "client_id": os.getenv("GOOGLE_CLIENT_ID"), + "auth_uri": os.getenv("GOOGLE_AUTH_URI"), + "token_uri": os.getenv("GOOGLE_TOKEN_URI"), + "auth_provider_x509_cert_url": os.getenv("GOOGLE_AUTH_PROVIDER_X509_CERT_URL"), + "client_x509_cert_url": os.getenv("GOOGLE_CLIENT_X509_CERT_URL"), + "universe_domain": os.getenv("GOOGLE_UNIVERSE_DOMAIN") + } + credentials['private_key'] = credentials['private_key'].replace('\\n', '\n') + credentials_json_str = json.dumps(credentials) + credentials_json = json.loads(credentials_json_str) + + return credentials_json + @app.route('/update_datasets') def update_datasets(): user_name = session.get('username') if not user_name: + logging.warning('User not logged in or user_name not set in session') return jsonify({'error': 'User not logged in or user_name not set in session'}), 401 - update_json_file_with_datasets(user_name) - return jsonify({'success': True}) + try: + logging.info(f'Updating datasets for user: {user_name}') + update_json_file_with_datasets(user_name) + logging.info('Datasets updated successfully') + return jsonify({'success': True}) + except Exception as e: + logging.error(f'Error updating datasets: {e}', exc_info=True) + return jsonify({'error': str(e)}), 500 def update_json_file_with_datasets(user_name): - # Load the existing JSON file - with open(datasets_file_path, 'r') as json_file: - data = json.load(json_file) - - # Assume this is the function that updates the 'data' dictionary - updated_data = get_datasets_update(user_name, data) + try: + # Ensure user directory exists + user_dir = os.path.join(os.getcwd(), user_name) + if not os.path.exists(user_dir): + os.makedirs(user_dir) + logging.info(f'Created directory for user: {user_dir}') + + logging.info('Loading the existing JSON file') + with open(datasets_file_path, 'r') as json_file: + data = json.load(json_file) + + logging.info('Updating JSON file with datasets') + updated_data = get_datasets_update(user_name, data) - # Write the updated data back to the file - with open(datasets_file_path, 'w') as json_file: - json.dump(updated_data, json_file, indent=4) + logging.info('Writing updated data back to the file') + with open(datasets_file_path, 'w') as json_file: + json.dump(updated_data, json_file, indent=4) + logging.info('JSON file updated successfully') + except Exception as e: + logging.error(f'Error in update_json_file_with_datasets: {e}', exc_info=True) + raise def get_datasets_update(user_name, data): - creds, _ = default() - # creds = ServiceAccountCredentials.from_json_keyfile_name("circle-418602-8aee1aeb2f00.json",scope) - gc = gspread.authorize(creds) - try: - sheet = gc.open('circle datasets').sheet1 - except SpreadsheetNotFound: - sh = gc.create('circle datasets') - sheet = sh.sheet1 - records = sheet.get_all_records() - - # Example logic to update the JSON structure based on your needs - for record in records: - if record['status(approved/not approved)'] == 'approved': - # Download CSV, read it, and update data (details skipped) - # Assuming dataset_name is unique and used as key - dataset_name = record['name'] - # Placeholder for actual logic to get description, num_rows, num_columns, columns - description = record['description'] - num_rows, num_columns, columns = download_google_sheet_as_csv(record['link'].split("id=")[1],user_name+"/"+dataset_name+".csv") - - # Update the JSON structure - if user_name not in data['user_data']: - data['user_data'][user_name] = {} - data['user_data'][user_name][dataset_name] = { - 'description': description, - 'num_rows': num_rows, - 'num_columns': num_columns, - 'columns': columns - } - - return data - - -def download_google_sheet_as_csv(file_id, local_file_path, credentials_json='circle-418602-8aee1aeb2f00.json'): - """ - Exports a Google Sheets document as a CSV file. - - Parameters: - - file_id: str. The ID of the Google Sheets document to download. - - local_file_path: str. The full local file path where the CSV will be saved. - - credentials_json: str. The path to the service account key file. - """ - - # Authenticate and create the Drive v3 API client - creds, _ = default() - # credentials = service_account.Credentials.from_service_account_file(credentials_json, scopes=['https://www.googleapis.com/auth/drive.readonly']) - service = build('drive', 'v3', credentials=creds) - - # Ensure the local directory exists - local_folder_path = local_file_path - - - # Export the Google Sheets document as CSV - request = service.files().export_media(fileId=file_id, mimeType='text/csv') - with io.FileIO(local_folder_path, 'w') as fh: - downloader = MediaIoBaseDownload(fh, request) - done = False - while not done: - status, done = downloader.next_chunk() - logging.debug(f"Download progress: {int(status.progress() * 100)}%") - print(f"Download progress: {int(status.progress() * 100)}%") - - print(f"File has been downloaded to '{local_file_path}'") - logging.info(f"File has been downloaded to '{local_file_path}'") - df= pd.read_csv(local_folder_path) - return len(df),len(df.columns),",".join(list(df.columns)) - - - -def get_confirm_token(response): - """Parse the download confirmation token from Google Drive""" - for key, value in response.cookies.items(): - if key.startswith('download_warning'): - return value - return None - -def save_response_content(response, destination): - """ - Save the content of the Google Drive file as specified in the destination. - """ - CHUNK_SIZE = 32768 # 32KB chunks + try: + logging.info('Authorizing Google Sheets API') + credentials = get_google_credentials_from_env() + print(f"----------------------{credentials}\n\n\n") + creds = ServiceAccountCredentials.from_json_keyfile_dict(credentials, scope) + # creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope) + gc = gspread.authorize(creds) + sheet = gc.open('circle user datasets').sheet1 + + logging.info('Fetching records from Google Sheets') + records = sheet.get_all_records() + + for record in records: + if record['status(approved/not approved)'] == 'approved': + dataset_name = record['name'] + description = record['description'] + logging.info(f'Downloading dataset: {dataset_name}') + num_rows, num_columns, columns = download_google_sheet_as_csv(record['link'].split("id=")[1], user_name+"/"+dataset_name+".csv") + + if user_name not in data['user_data']: + data['user_data'][user_name] = {} + data['user_data'][user_name][dataset_name] = { + 'description': description, + 'num_rows': num_rows, + 'num_columns': num_columns, + 'columns': columns + } + return data + except Exception as e: + logging.error(f'Error in get_datasets_update: {e}', exc_info=True) + raise - with open(destination, "wb") as f: - for chunk in response.iter_content(CHUNK_SIZE): - if chunk: # filter out keep-alive new chunks - f.write(chunk) +def download_google_sheet_as_csv(file_id, local_file_path): + try: + logging.info('Authenticating and creating the Drive v3 API client') + credentials = get_google_credentials_from_env() + print(f"----------------------{credentials}\n\n\n") + + creds = ServiceAccountCredentials.from_json_keyfile_dict(credentials, scope) + # creds = service_account.Credentials.from_service_account_file(credentials_json, scopes=['https://www.googleapis.com/auth/drive.readonly']) + service = build('drive', 'v3', credentials=creds) + + # Ensure the local directory exists + local_folder_path = os.path.dirname(local_file_path) + if not os.path.exists(local_folder_path): + os.makedirs(local_folder_path) + logging.info(f'Created directory for file: {local_folder_path}') + + logging.info('Exporting the Google Sheets document as CSV') + request = service.files().export_media(fileId=file_id, mimeType='text/csv') + with io.FileIO(local_file_path, 'w') as fh: + downloader = MediaIoBaseDownload(fh, request) + done = False + while not done: + status, done = downloader.next_chunk() + logging.debug(f"Download progress: {int(status.progress() * 100)}%") + + logging.info(f"File has been downloaded to '{local_file_path}'") + df = pd.read_csv(local_file_path) + return len(df), len(df.columns), ",".join(list(df.columns)) + except Exception as e: + logging.error(f'Error in download_google_sheet_as_csv: {e}', exc_info=True) + raise @app.route('/upload', methods=['POST']) def upload_file(): @@ -161,8 +177,11 @@ def upload_file(): file_path = os.path.join('/tmp', file.filename) file.save(file_path) - creds, _ = default() - # creds = ServiceAccountCredentials.from_json_keyfile_name("circle-418602-8aee1aeb2f00.json",scope) + credentials = get_google_credentials_from_env() + print(f"----------------------{credentials}\n\n\n") + + creds = ServiceAccountCredentials.from_json_keyfile_dict(credentials, scope) + # creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json",scope) drive_service = build('drive', 'v3', credentials=creds) file_metadata = { @@ -178,18 +197,27 @@ def upload_file(): drive_service.permissions().create(fileId=file_id, body={'type': 'anyone', 'role': 'reader'}).execute() # Add details to Google Sheets - gc = gspread.service_account(filename='circle-418602-8aee1aeb2f00.json') + # gc = gspread.service_account(filename='creds.json') + gc = gspread.service_account_from_dict(credentials) + from gspread import spreadsheet try: - sheet = gc.open('circle datasets').sheet1 + print("trying to open sheets") + sheet = gc.open('circle user datasets').sheet1 + + # gc.share('highharii@gmail.com', perm_type='user', role='writer') + print(gc.list_spreadsheet_files()) except SpreadsheetNotFound: - sh = gc.create('circle datasets') + print("creating new sheet") + sh = gc.create('circle user datasets') + sh.share('highharii@gmail.com', perm_type='user', role='writer') sheet = sh.sheet1 + sheet.append_row(['user_name', 'name', 'description', 'link', 'status(approved/not approved)']) # Assuming 'name', 'description' are the IDs of your form inputs name = request.form['name'] description = request.form['description'] user_name = session.get('username') - sheet.append_row([user_name, name, description, file_link,"pending"]) + sheet.append_row([user_name, name, description, file_link,"approved"]) return jsonify({'success': True, 'link': file_link}) @@ -218,7 +246,6 @@ def datasets(): def TrainModels(): return render_template("TrainModels.html") - @app.route('/model_card') def model_card(): model_name = request.args.get('model_name') @@ -231,10 +258,11 @@ def model_card(): if m["model_name"] == model_name: model_details = m model_details["user_name"] = session['username'] - logging.info(f"Model card page loaded successfully for model: {model_name}") + # print(model_details) return render_template("model_card.html", model=model_details) + @app.route('/signup', methods = ['GET', 'POST']) def signup(): return render_template("signup.html") @@ -623,7 +651,8 @@ def register(): @app.errorhandler(404) def page_not_found(e): - print("not found") + # print("not found") + return "not found" # return render_template('404.html'), 404 diff --git a/main.tf b/main.tf index 83c6885..c6b89e7 100644 --- a/main.tf +++ b/main.tf @@ -74,6 +74,28 @@ resource "google_compute_instance" "circle_instance" { env: - name: MONGO_URI value: ${var.mongo_uri} + - name: GOOGLE_TYPE + value: ${var.GOOGLE_TYPE} + - name: GOOGLE_PROJECT_ID + value: ${var.GOOGLE_PROJECT_ID} + - name: GOOGLE_PRIVATE_KEY_ID + value: ${var.GOOGLE_PRIVATE_KEY_ID} + - name: GOOGLE_PRIVATE_KEY + value: ${var.GOOGLE_PRIVATE_KEY} + - name: GOOGLE_CLIENT_EMAIL + value: ${var.GOOGLE_CLIENT_EMAIL} + - name: GOOGLE_CLIENT_ID + value: ${var.GOOGLE_CLIENT_ID} + - name: GOOGLE_AUTH_URI + value: ${var.GOOGLE_AUTH_URI} + - name: GOOGLE_TOKEN_URI + value: ${var.GOOGLE_TOKEN_URI} + - name: GOOGLE_AUTH_PROVIDER_X509_CERT_URL + value: ${var.GOOGLE_AUTH_PROVIDER_X509_CERT_URL} + - name: GOOGLE_CLIENT_X509_CERT_URL + value: ${var.GOOGLE_CLIENT_X509_CERT_URL} + - name: GOOGLE_UNIVERSE_DOMAIN + value: ${var.GOOGLE_UNIVERSE_DOMAIN} stdin: false tty: false restartPolicy: OnFailure diff --git a/static/css/style.css b/static/css/style.css index f9ff39a..f6457e9 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -9,114 +9,7 @@ list-type-ulli, .socials { margin: 0; padding: 0; } -/* poppins-300 - latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 300; - src: url("../fonts/poppins/poppins-v5-latin-300.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Light"), local("Poppins-Light"), url("../fonts/poppins/poppins-v5-latin-300.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-300.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-300.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-300.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-300.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-300italic - latin */ -@font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 300; - src: url("../fonts/poppins/poppins-v5-latin-300italic.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Light Italic"), local("Poppins-LightItalic"), url("../fonts/poppins/poppins-v5-latin-300italic.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-300italic.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-300italic.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-300italic.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-300italic.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-regular - latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 400; - src: url("../fonts/poppins/poppins-v5-latin-regular.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Regular"), local("Poppins-Regular"), url("../fonts/poppins/poppins-v5-latin-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-regular.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-regular.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-regular.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-regular.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-italic - latin */ -@font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 400; - src: url("../fonts/poppins/poppins-v5-latin-italic.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Italic"), local("Poppins-Italic"), url("../fonts/poppins/poppins-v5-latin-italic.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-italic.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-italic.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-italic.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-italic.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-500 - latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 500; - src: url("../fonts/poppins/poppins-v5-latin-500.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Medium"), local("Poppins-Medium"), url("../fonts/poppins/poppins-v5-latin-500.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-500.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-500.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-500.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-500.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-500italic - latin */ -@font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 500; - src: url("../fonts/poppins/poppins-v5-latin-500italic.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Medium Italic"), local("Poppins-MediumItalic"), url("../fonts/poppins/poppins-v5-latin-500italic.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-500italic.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-500italic.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-500italic.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-500italic.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-600 - latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 600; - src: url("../fonts/poppins/poppins-v5-latin-600.eot"); - /* IE9 Compat Modes */ - src: local("Poppins SemiBold"), local("Poppins-SemiBold"), url("../fonts/poppins/poppins-v5-latin-600.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-600.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-600.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-600.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-600.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-700 - latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 700; - src: url("../fonts/poppins/poppins-v5-latin-700.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Bold"), local("Poppins-Bold"), url("../fonts/poppins/poppins-v5-latin-700.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-700.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-700.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-700.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-700.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-700italic - latin */ -@font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 700; - src: url("../fonts/poppins/poppins-v5-latin-700italic.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Bold Italic"), local("Poppins-BoldItalic"), url("../fonts/poppins/poppins-v5-latin-700italic.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-700italic.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-700italic.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-700italic.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-700italic.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-800 - latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 800; - src: url("../fonts/poppins/poppins-v5-latin-800.eot"); - /* IE9 Compat Modes */ - src: local("Poppins ExtraBold"), local("Poppins-ExtraBold"), url("../fonts/poppins/poppins-v5-latin-800.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-800.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-800.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-800.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-800.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-800italic - latin */ -@font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 800; - src: url("../fonts/poppins/poppins-v5-latin-800italic.eot"); - /* IE9 Compat Modes */ - src: local("Poppins ExtraBold Italic"), local("Poppins-ExtraBoldItalic"), url("../fonts/poppins/poppins-v5-latin-800italic.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-800italic.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-800italic.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-800italic.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-800italic.svg#Poppins") format("svg"); - /* Legacy iOS */ } -/* poppins-900 - latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 900; - src: url("../fonts/poppins/poppins-v5-latin-900.eot"); - /* IE9 Compat Modes */ - src: local("Poppins Black"), local("Poppins-Black"), url("../fonts/poppins/poppins-v5-latin-900.eot?#iefix") format("embedded-opentype"), url("../fonts/poppins/poppins-v5-latin-900.woff2") format("woff2"), url("../fonts/poppins/poppins-v5-latin-900.woff") format("woff"), url("../fonts/poppins/poppins-v5-latin-900.ttf") format("truetype"), url("../fonts/poppins/poppins-v5-latin-900.svg#Poppins") format("svg"); - /* Legacy iOS */ } + a:focus, a:active { text-decoration: none; outline: none; @@ -386,7 +279,6 @@ input[type=checkbox]:not(old):checked + label > span:before { font-size: 11px; line-height: 1.2; text-align: center; - font-family: 'Material-Design-Iconic-Font'; font-weight: bold; } .agree-term { @@ -425,7 +317,7 @@ label.valid { height: 20px; background: transparent; } label.valid:after { - font-family: 'Material-Design-Iconic-Font'; + font-family: 'sans-serif'; content: '\f269'; width: 100%; height: 100%; diff --git a/static/css/style.css.map b/static/css/style.css.map deleted file mode 100644 index 35f8133..0000000 --- a/static/css/style.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ -"version": 3, -"mappings": "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", -"sources": ["../scss/common/extend.scss","../scss/common/fonts.scss","../scss/common/global.scss","../scss/common/minxi.scss","../scss/common/variables.scss","../scss/layouts/main.scss","../scss/layouts/responsive.scss"], -"names": [], -"file": "style.css" -} \ No newline at end of file diff --git a/static/images/demo/force_plot_gen1.html b/static/images/demo/force_plot_gen1.html new file mode 100644 index 0000000..0090f8f --- /dev/null +++ b/static/images/demo/force_plot_gen1.html @@ -0,0 +1,47 @@ + + +
+
+ Visualization omitted, Javascript library not loaded!
+ Have you run `initjs()` in this notebook? If this notebook was from another + user you must also trust this notebook (File -> Trust notebook). If you are viewing + this notebook on github the Javascript has been stripped for security. If you are using + JupyterLab this error is because a JupyterLab extension has not yet been written. +
+ diff --git a/static/images/demo/force_plot_gen123.html b/static/images/demo/force_plot_gen123.html new file mode 100644 index 0000000..aff65d0 --- /dev/null +++ b/static/images/demo/force_plot_gen123.html @@ -0,0 +1,47 @@ + + +
+
+ Visualization omitted, Javascript library not loaded!
+ Have you run `initjs()` in this notebook? If this notebook was from another + user you must also trust this notebook (File -> Trust notebook). If you are viewing + this notebook on github the Javascript has been stripped for security. If you are using + JupyterLab this error is because a JupyterLab extension has not yet been written. +
+ diff --git a/static/images/demo/force_plot_testname1.html b/static/images/demo/force_plot_testname1.html new file mode 100644 index 0000000..dfc02fc --- /dev/null +++ b/static/images/demo/force_plot_testname1.html @@ -0,0 +1,47 @@ + + +
+
+ Visualization omitted, Javascript library not loaded!
+ Have you run `initjs()` in this notebook? If this notebook was from another + user you must also trust this notebook (File -> Trust notebook). If you are viewing + this notebook on github the Javascript has been stripped for security. If you are using + JupyterLab this error is because a JupyterLab extension has not yet been written. +
+ diff --git a/static/images/demo/shap_bar_gen1.png b/static/images/demo/shap_bar_gen1.png new file mode 100644 index 0000000..d6da966 Binary files /dev/null and b/static/images/demo/shap_bar_gen1.png differ diff --git a/static/images/demo/shap_bar_gen123.png b/static/images/demo/shap_bar_gen123.png new file mode 100644 index 0000000..ca354bc Binary files /dev/null and b/static/images/demo/shap_bar_gen123.png differ diff --git a/static/images/demo/shap_bar_testname1.png b/static/images/demo/shap_bar_testname1.png new file mode 100644 index 0000000..f0c642f Binary files /dev/null and b/static/images/demo/shap_bar_testname1.png differ diff --git a/static/images/demo/shap_dependence_gen1.png b/static/images/demo/shap_dependence_gen1.png new file mode 100644 index 0000000..b642103 Binary files /dev/null and b/static/images/demo/shap_dependence_gen1.png differ diff --git a/static/images/demo/shap_dependence_testname1.png b/static/images/demo/shap_dependence_testname1.png new file mode 100644 index 0000000..2eb817d Binary files /dev/null and b/static/images/demo/shap_dependence_testname1.png differ diff --git a/static/images/demo/shap_summary_gen1.png b/static/images/demo/shap_summary_gen1.png new file mode 100644 index 0000000..5b33836 Binary files /dev/null and b/static/images/demo/shap_summary_gen1.png differ diff --git a/static/images/demo/shap_summary_gen123.png b/static/images/demo/shap_summary_gen123.png new file mode 100644 index 0000000..b8a8694 Binary files /dev/null and b/static/images/demo/shap_summary_gen123.png differ diff --git a/static/images/demo/shap_summary_testname1.png b/static/images/demo/shap_summary_testname1.png new file mode 100644 index 0000000..9f4fb0f Binary files /dev/null and b/static/images/demo/shap_summary_testname1.png differ diff --git a/static/images/demo/shap_waterfall_gen1.png b/static/images/demo/shap_waterfall_gen1.png new file mode 100644 index 0000000..a6d7004 Binary files /dev/null and b/static/images/demo/shap_waterfall_gen1.png differ diff --git a/static/images/demo/shap_waterfall_gen123.png b/static/images/demo/shap_waterfall_gen123.png new file mode 100644 index 0000000..c55bf3f Binary files /dev/null and b/static/images/demo/shap_waterfall_gen123.png differ diff --git a/static/images/demo/shap_waterfall_testname1.png b/static/images/demo/shap_waterfall_testname1.png new file mode 100644 index 0000000..67fb2c8 Binary files /dev/null and b/static/images/demo/shap_waterfall_testname1.png differ diff --git a/static/images/harii/force_plot_customf1dataset.html b/static/images/harii/force_plot_customf1dataset.html new file mode 100644 index 0000000..9ecfd79 --- /dev/null +++ b/static/images/harii/force_plot_customf1dataset.html @@ -0,0 +1,18 @@ + + +
+
+ Visualization omitted, Javascript library not loaded!
+ Have you run `initjs()` in this notebook? If this notebook was from another + user you must also trust this notebook (File -> Trust notebook). If you are viewing + this notebook on github the Javascript has been stripped for security. If you are using + JupyterLab this error is because a JupyterLab extension has not yet been written. +
+ diff --git a/static/images/harii/shap_bar_customf1dataset.png b/static/images/harii/shap_bar_customf1dataset.png new file mode 100644 index 0000000..da5318a Binary files /dev/null and b/static/images/harii/shap_bar_customf1dataset.png differ diff --git a/static/images/harii/shap_dependence_customf1dataset.png b/static/images/harii/shap_dependence_customf1dataset.png new file mode 100644 index 0000000..8d6ef0e Binary files /dev/null and b/static/images/harii/shap_dependence_customf1dataset.png differ diff --git a/static/images/harii/shap_summary_customf1dataset.png b/static/images/harii/shap_summary_customf1dataset.png new file mode 100644 index 0000000..342c4c4 Binary files /dev/null and b/static/images/harii/shap_summary_customf1dataset.png differ diff --git a/static/images/harii/shap_waterfall_customf1dataset.png b/static/images/harii/shap_waterfall_customf1dataset.png new file mode 100644 index 0000000..86eb18f Binary files /dev/null and b/static/images/harii/shap_waterfall_customf1dataset.png differ diff --git a/static/scss/common/extend.scss b/static/scss/common/extend.scss deleted file mode 100644 index 5624e21..0000000 --- a/static/scss/common/extend.scss +++ /dev/null @@ -1,11 +0,0 @@ -/* @extend display-flex; */ -display-flex { - display: flex; - display: -webkit-flex; -} -/* @extend list-type-ulli; */ -list-type-ulli { - list-style-type: none; - margin: 0; - padding: 0; -} diff --git a/static/scss/common/fonts.scss b/static/scss/common/fonts.scss deleted file mode 100644 index 76aa397..0000000 --- a/static/scss/common/fonts.scss +++ /dev/null @@ -1,156 +0,0 @@ -/* poppins-300 - latin */ -@font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 300; - src: url('../fonts/poppins/poppins-v5-latin-300.eot'); /* IE9 Compat Modes */ - src: local('Poppins Light'), local('Poppins-Light'), - url('../fonts/poppins/poppins-v5-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-300.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-300.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-300.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-300italic - latin */ - @font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 300; - src: url('../fonts/poppins/poppins-v5-latin-300italic.eot'); /* IE9 Compat Modes */ - src: local('Poppins Light Italic'), local('Poppins-LightItalic'), - url('../fonts/poppins/poppins-v5-latin-300italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-300italic.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-300italic.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-300italic.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-300italic.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-regular - latin */ - @font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 400; - src: url('../fonts/poppins/poppins-v5-latin-regular.eot'); /* IE9 Compat Modes */ - src: local('Poppins Regular'), local('Poppins-Regular'), - url('../fonts/poppins/poppins-v5-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-regular.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-regular.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-italic - latin */ - @font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 400; - src: url('../fonts/poppins/poppins-v5-latin-italic.eot'); /* IE9 Compat Modes */ - src: local('Poppins Italic'), local('Poppins-Italic'), - url('../fonts/poppins/poppins-v5-latin-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-italic.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-italic.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-italic.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-italic.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-500 - latin */ - @font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 500; - src: url('../fonts/poppins/poppins-v5-latin-500.eot'); /* IE9 Compat Modes */ - src: local('Poppins Medium'), local('Poppins-Medium'), - url('../fonts/poppins/poppins-v5-latin-500.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-500.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-500.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-500.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-500.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-500italic - latin */ - @font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 500; - src: url('../fonts/poppins/poppins-v5-latin-500italic.eot'); /* IE9 Compat Modes */ - src: local('Poppins Medium Italic'), local('Poppins-MediumItalic'), - url('../fonts/poppins/poppins-v5-latin-500italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-500italic.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-500italic.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-500italic.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-500italic.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-600 - latin */ - @font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 600; - src: url('../fonts/poppins/poppins-v5-latin-600.eot'); /* IE9 Compat Modes */ - src: local('Poppins SemiBold'), local('Poppins-SemiBold'), - url('../fonts/poppins/poppins-v5-latin-600.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-600.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-600.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-600.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-600.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-700 - latin */ - @font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 700; - src: url('../fonts/poppins/poppins-v5-latin-700.eot'); /* IE9 Compat Modes */ - src: local('Poppins Bold'), local('Poppins-Bold'), - url('../fonts/poppins/poppins-v5-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-700.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-700.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-700italic - latin */ - @font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 700; - src: url('../fonts/poppins/poppins-v5-latin-700italic.eot'); /* IE9 Compat Modes */ - src: local('Poppins Bold Italic'), local('Poppins-BoldItalic'), - url('../fonts/poppins/poppins-v5-latin-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-700italic.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-700italic.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-700italic.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-700italic.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-800 - latin */ - @font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 800; - src: url('../fonts/poppins/poppins-v5-latin-800.eot'); /* IE9 Compat Modes */ - src: local('Poppins ExtraBold'), local('Poppins-ExtraBold'), - url('../fonts/poppins/poppins-v5-latin-800.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-800.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-800.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-800.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-800.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-800italic - latin */ - @font-face { - font-family: 'Poppins'; - font-style: italic; - font-weight: 800; - src: url('../fonts/poppins/poppins-v5-latin-800italic.eot'); /* IE9 Compat Modes */ - src: local('Poppins ExtraBold Italic'), local('Poppins-ExtraBoldItalic'), - url('../fonts/poppins/poppins-v5-latin-800italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-800italic.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-800italic.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-800italic.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-800italic.svg#Poppins') format('svg'); /* Legacy iOS */ - } - /* poppins-900 - latin */ - @font-face { - font-family: 'Poppins'; - font-style: normal; - font-weight: 900; - src: url('../fonts/poppins/poppins-v5-latin-900.eot'); /* IE9 Compat Modes */ - src: local('Poppins Black'), local('Poppins-Black'), - url('../fonts/poppins/poppins-v5-latin-900.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('../fonts/poppins/poppins-v5-latin-900.woff2') format('woff2'), /* Super Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-900.woff') format('woff'), /* Modern Browsers */ - url('../fonts/poppins/poppins-v5-latin-900.ttf') format('truetype'), /* Safari, Android, iOS */ - url('../fonts/poppins/poppins-v5-latin-900.svg#Poppins') format('svg'); /* Legacy iOS */ - } \ No newline at end of file diff --git a/static/scss/common/global.scss b/static/scss/common/global.scss deleted file mode 100644 index 3584fd7..0000000 --- a/static/scss/common/global.scss +++ /dev/null @@ -1,60 +0,0 @@ - a:focus, a:active { text-decoration: none; outline: none; @include transition(all 300ms ease 0s); } -input, select, textarea { outline: none; @include appearance( unset ); } -input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { - @include appearance( none ); - margin: 0; -} -input:focus, select:focus, textarea:focus { outline: none; @include box-shadow-input(none); } -input[type=checkbox] { @include appearance( checkbox ); } -input[type=radio] { @include appearance( radio ); } -img { max-width: 100%; height: auto; } -figure { margin: 0; } -p { margin-bottom: 0px; font-size: 15px; color: #777;} -h2 { - line-height: 1.66; - margin: 0; - padding: 0; - font-weight: bold; - color: $black-color; - font-family: Poppins; - font-size: 36px; -} -.main { - background: #f8f8f8; - padding: 150px 0; -} -.clear { clear: both; } -body { - font-size: 13px; - line-height: 1.8; - color: $black-color; - background: #f8f8f8; - font-weight: 400; - font-family: Poppins; -} -.container { - width: 900px; - background: #fff; - margin: 0 auto; - @include box-shadow(0px 15px 16.83px 0.17px rgba(0, 0, 0, 0.05)); - @include border-radius(20px); -} - -.display-flex { - @extend display-flex; - @include justify-content(space-between); - @include align-items(center); -} - -.display-flex-center { - @extend display-flex; - @include justify-content(center); - @include align-items(center); -} - -.position-center { - position: absolute; - top: 50%; - left: 50%; - @include transform(translate(-50%,-50%)); -} diff --git a/static/scss/common/minxi.scss b/static/scss/common/minxi.scss deleted file mode 100644 index 3c4439b..0000000 --- a/static/scss/common/minxi.scss +++ /dev/null @@ -1,152 +0,0 @@ -// mixin -@mixin border-radius($value) { - border-radius: $value; - -moz-border-radius: $value; - -webkit-border-radius: $value; - -o-border-radius: $value; - -ms-border-radius: $value; -} -@mixin background-size($value) { - background-size: $value; - -moz-background-size: $value; - -webkit-background-size: $value; - -o-background-size: $value; - -ms-background-size: $value; -} -@mixin background-gradient-three($color1, $color2, $color3) { - background: linear-gradient($color1, $color2, $color3); - background: -moz-linear-gradient($color1, $color2, $color3); - background: -webkit-linear-gradient($color1, $color2, $color3); - background: -o-linear-gradient($color1, $color2, $color3); - background: -ms-linear-gradient($color1, $color2, $color3); -} -@mixin background-gradient-six($color1, $color2, $color3, $color4, $color5, $color6) { - background: linear-gradient($color1, $color2, $color3, $color4, $color5, $color6); - background: -moz-linear-gradient($color1, $color2, $color3, $color4, $color5, $color6); - background: -webkit-linear-gradient($color1, $color2, $color3, $color4, $color5, $color6); - background: -o-linear-gradient($color1, $color2, $color3, $color4, $color5, $color6); - background: -ms-linear-gradient($color1, $color2, $color3, $color4, $color5, $color6); -} -@mixin transform($value) { - transform: $value; - -moz-transform: $value; - -webkit-transform: $value; - -o-transform: $value; - -ms-transform: $value; -} -@mixin box-shadow($value) { - box-shadow: $value; - -moz-box-shadow: $value; - -webkit-box-shadow: $value; - -o-box-shadow: $value; - -ms-box-shadow: $value; -} -@mixin filter($value) { - filter: $value; - -moz-filter: $value; - -webkit-filter: $value; - -o-filter: $value; - -ms-filter: $value; -} -@mixin transition($value) { - transition: $value; - -moz-transition: $value; - -webkit-transition: $value; - -o-transition: $value; - -ms-transition: $value; -} -@mixin animation($value) { - animation: $value; - -moz-animation: $value; - -webkit-animation: $value; - -o-animation: $value; - -ms-animation: $value; -} -@mixin transform-origin($value) { - transform-origin: $value; - -moz-transform-origin: $value; - -webkit-transform-origin: $value; - -o-transform-origin: $value; - -ms-transform-origin: $value; -} -@mixin appearance($value) { - appearance: $value !important; - -moz-appearance: $value !important; - -webkit-appearance: $value !important; - -o-appearance: $value !important; - -ms-appearance: $value !important; -} -@mixin box-shadow-input($value) { - box-shadow: $value !important; - -moz-box-shadow: $value !important; - -webkit-box-shadow: $value !important; - -o-box-shadow: $value !important; - -ms-box-shadow: $value !important; -} - -//flex -@mixin flex-wrap($value) { - flex-wrap: $value; - -moz-flex-wrap: $value; - -webkit-flex-wrap: $value; - -o-flex-wrap: $value; - -ms-flex-wrap: $value; -} -@mixin flex-direction($value) { - flex-direction: $value; - -moz-flex-direction: $value; - -webkit-flex-direction: $value; - -o-flex-direction: $value; - -ms-flex-direction: $value; -} -@mixin flex-flow($value) { - flex-flow: $value; - -moz-flex-flow: $value; - -webkit-flex-flow: $value; - -o-flex-flow: $value; - -ms-flex-flow: $value; -} -@mixin justify-content($value) { - justify-content: $value; - -moz-justify-content: $value; - -webkit-justify-content: $value; - -o-justify-content: $value; - -ms-justify-content: $value; -} -@mixin align-items($value) { - align-items: $value; - -moz-align-items: $value; - -webkit-align-items: $value; - -o-align-items: $value; - -ms-align-items: $value; -} -@mixin order($value) { - order: $value; - -moz-order: $value; - -webkit-order: $value; - -o-order: $value; - -ms-order: $value; -} -@mixin flex($value) { - flex: $value; - -moz-flex: $value; - -webkit-flex: $value; - -o-flex: $value; - -ms-flex: $value; -} - - -@mixin input-placeholder($value) { - &::-webkit-input-placeholder { - color: $value; - } - &::-moz-placeholder { - color: $value; - } - &:-ms-input-placeholder { - color: $value; - } - &:-moz-placeholder { - color: $value; - } -} \ No newline at end of file diff --git a/static/scss/common/variables.scss b/static/scss/common/variables.scss deleted file mode 100644 index 1760b7d..0000000 --- a/static/scss/common/variables.scss +++ /dev/null @@ -1,3 +0,0 @@ -$black-color : #222; -$blue-color : #6dabe4; -$grey-light: #999; \ No newline at end of file diff --git a/static/scss/layouts/main.scss b/static/scss/layouts/main.scss deleted file mode 100644 index fb28be7..0000000 --- a/static/scss/layouts/main.scss +++ /dev/null @@ -1,256 +0,0 @@ -.signup { - margin-bottom: 150px; -} -.signup-content { - @extend display-flex; - padding: 75px 0; - // flex-flow: wrap; -} -.signup-form, .signup-image, .signin-form, .signin-image{ - width: 50%; - overflow: hidden; -} -.signup-image { - margin: 0 55px; -} -.form-title { - margin-bottom: 33px; -} -.signup-image { - margin-top: 45px; -} -figure { - margin-bottom: 50px; - text-align: center; -} -.form-submit { - display: inline-block; - background: $blue-color; - color: #fff; - border-bottom: none; - width: auto; - padding: 15px 39px; - @include border-radius(5px); - margin-top: 25px; - cursor: pointer; - &:hover { - background: darken($blue-color, 10%); - } -} - -#signin { - margin-top: 16px; -} -.signup-image-link { - font-size: 14px; - color: $black-color; - display: block; - text-align: center; -} - -.term-service { - font-size: 13px; - color: $black-color; -} -.signup-form { - margin-left: 75px; - margin-right: 75px; - padding-left: 34px; -} -.register-form { - width: 100%; -} -.form-group { - position: relative; - margin-bottom: 25px; - overflow: hidden; - &:last-child { - margin-bottom: 0px; - } -} - -input { - width: 100%; - display: block; - border: none; - border-bottom: 1px solid $grey-light; - padding: 6px 30px; - font-family: Poppins; - box-sizing: border-box; - @include input-placeholder($grey-light); - &:focus { - border-bottom: 1px solid $black-color; - @include input-placeholder($black-color); - } -} - -input[type=checkbox]:not(old){ - width : 2em; - margin : 0; - padding : 0; - font-size : 1em; - display: none; -} -input[type=checkbox]:not(old) + label{ - display : inline-block; - line-height : 1.5em; - margin-top: 6px; -} -input[type=checkbox]:not(old) + label > span{ - display : inline-block; - width : 13px; - height : 13px; - margin-right: 15px; - margin-bottom: 3px; - border : 1px solid $grey-light; - @include border-radius(2px); - background : rgb(255,255,255); - background-image : -moz-linear-gradient(rgb(255,255,255),rgb(255,255,255)); - background-image : -ms-linear-gradient(rgb(255,255,255),rgb(255,255,255)); - background-image : -o-linear-gradient(rgb(255,255,255),rgb(255,255,255)); - background-image : -webkit-linear-gradient(rgb(255,255,255),rgb(255,255,255)); - background-image : linear-gradient(rgb(255,255,255),rgb(255,255,255 )); - vertical-align : bottom; -} -input[type=checkbox]:not(old):checked + label > span,{ - background-image : -moz-linear-gradient(rgb(255,255,255),rgb(255,255,255)); - background-image : -ms-linear-gradient(rgb(255,255,255),rgb(255,255,255)); - background-image : -o-linear-gradient(rgb(255,255,255),rgb(255,255,255)); - background-image : -webkit-linear-gradient(rgb(255,255,255),rgb(255,255,255)); - background-image : linear-gradient(rgb(255,255,255),rgb(255,255,255 )); -} -input[type=checkbox]:not(old):checked + label > span:before{ - content : '\f26b'; - display : block; - color : $black-color; - font-size : 11px; - line-height : 1.2; - text-align : center; - font-family: 'Material-Design-Iconic-Font'; - font-weight: bold; - } -.agree-term { - display: inline-block; - width: auto; -} - -label { - position: absolute; - left: 0; - top: 50%; - @include transform(translateY(-50%)); - color: $black-color; -} -.label-has-error { - top: 22%; -} -label.error { - position: relative; - background: url('../images/unchecked.gif') no-repeat; - background-position-y: 3px; - padding-left: 20px; - display: block; - margin-top: 20px; -} -label.valid { - display: block; - - position: absolute; - right: 0; - left: auto; - margin-top: -6px; - width: 20px; - height: 20px; - background: transparent; - &:after { - font-family: 'Material-Design-Iconic-Font'; - content: '\f269'; - width: 100%; - height: 100%; - position: absolute; - /* right: 0; */ - font-size: 16px; - color: green; - } -} -.label-agree-term { - position: relative; - top: 0%; - @include transform(translateY(0)); -} -.material-icons-name { - font-size: 18px; -} - - -// Login - -.signin-content { - @extend display-flex; - padding-top: 67px; - padding-bottom: 87px; - // padding: 67px 0; -} -.social-login { - @extend display-flex; - @include align-items(center); - margin-top: 80px; -} -.social-label { - display: inline-block; - margin-right: 15px; -} -.socials { - @extend display-flex; - @extend list-type-ulli; - li { - padding: 5px; - &:last-child { - margin-right: 0px; - } - a { - text-decoration: none; - i { - width: 30px; - height: 30px; - color: #fff; - font-size: 14px; - @include border-radius(5px); - @include transform(translateZ(0)); - -webkit-transition-duration: 0.3s; - transition-duration: 0.3s; - -webkit-transition-property: transform; - transition-property: transform; - -webkit-transition-timing-function: ease-out; - transition-timing-function: ease-out; - } - } - &:hover { - a { - i { - -webkit-transform: scale(1.3) translateZ(0); - transform: scale(1.3) translateZ(0); - } - } - } - } -} -.zmdi-facebook { - background: #3b5998; -} -.zmdi-twitter { - background: #1da0f2; -} -.zmdi-google { - background: #e72734; -} -.signin-form { - margin-right: 90px; - margin-left: 80px; -} -.signin-image { - margin-left: 110px; - margin-right: 20px; - margin-top: 10px; -} - \ No newline at end of file diff --git a/static/scss/layouts/responsive.scss b/static/scss/layouts/responsive.scss deleted file mode 100644 index b9b8eed..0000000 --- a/static/scss/layouts/responsive.scss +++ /dev/null @@ -1,101 +0,0 @@ -@media screen and (max-width: 1600px) { - -} - -@media screen and (max-width: 1300px) { - -} - -//end 1200px -@media screen and (max-width: 1200px) { - .container { - width: calc( 100% - 30px); - max-width: 100%; - } -} - -@media screen and (min-width: 1024px) { - .container { - max-width: 1200px; - } -} - -//end 1200px -@media screen and (max-width: 1024px) { -} - -//end 1024px -@media screen and (max-width: 992px) { - -} - -//end 992px -@media screen and (max-width: 768px) { - - .signup-content, .signin-content { - @include flex-direction(column); - @include justify-content(center); - } - .signup-form { - margin-left: 0px; - margin-right: 0px; - padding-left: 0px; - /* box-sizing: border-box; */ - padding: 0 30px; - } - .signin-image { - margin-left: 0px; - margin-right: 0px; - margin-top: 50px; - @include order(2); - } - .signup-form, .signup-image, .signin-form, .signin-image { - width: auto; - } - - .social-login { - @include justify-content(center); - } - .form-button { - text-align: center; - } - .signin-form { - @include order(1); - margin-right: 0px; - margin-left: 0px; - padding: 0 30px; - } - .form-title { - text-align: center; - } - -} - -@media screen and (max-width: 620px) { - -} - -//end 767px -@media screen and (max-width: 575px) { - -} - -//end 575px -@media screen and (max-width: 480px) { - -} - -//end 480px -@media screen and (max-width: 400px) { - .social-login { - @include flex-direction(column); - } - .social-label { - margin-right: 0px; - margin-bottom: 10px; - } -} - -//end 400px - -@media screen and (max-width: 320px) {} \ No newline at end of file diff --git a/static/scss/style.scss b/static/scss/style.scss deleted file mode 100644 index 1c66b32..0000000 --- a/static/scss/style.scss +++ /dev/null @@ -1,12 +0,0 @@ -//Common -@import 'common/extend.scss'; -@import 'common/fonts.scss'; -@import 'common/minxi.scss'; -@import 'common/variables.scss'; -@import 'common/global.scss'; - -//layout -@import 'layouts/main.scss'; - -// Responsive -@import 'layouts/responsive.scss'; \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 6c7d257..a808289 100644 --- a/templates/index.html +++ b/templates/index.html @@ -6,7 +6,7 @@ Circle Sandbox - +