feat(learn): python certification projects (#38216)

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
Co-authored-by: Kristofer Koishigawa <scissorsneedfoodtoo@gmail.com>
Co-authored-by: Beau Carnes <beaucarnes@gmail.com>
This commit is contained in:
mrugesh
2020-02-25 00:10:32 +05:30
committed by Mrugesh Mohapatra
parent 3c3ceaa3f5
commit 22afc2a0ca
771 changed files with 1719 additions and 61 deletions

View File

@ -19,7 +19,10 @@ import {
dataVis2018Id,
apisMicroservicesId,
infosecQaId,
fullStackId
fullStackId,
sciCompPyId,
dataAnalysisPyId,
machineLearningPyId
} from '../utils/constantStrings.json';
import { oldDataVizId } from '../../../config/misc';
import certTypes from '../utils/certTypes.json';
@ -104,7 +107,13 @@ function createCertTypeIds(app) {
Challenge
),
[certTypes.infosecQa]: getIdsForCert$(infosecQaId, Challenge),
[certTypes.fullStack]: getIdsForCert$(fullStackId, Challenge)
[certTypes.fullStack]: getIdsForCert$(fullStackId, Challenge),
[certTypes.sciCompPy]: getIdsForCert$(sciCompPyId, Challenge),
[certTypes.dataAnalysisPy]: getIdsForCert$(dataAnalysisPyId, Challenge),
[certTypes.machineLearningPy]: getIdsForCert$(
machineLearningPyId,
Challenge
)
};
}
@ -124,7 +133,10 @@ const certIds = {
[certTypes.dataVis2018]: dataVis2018Id,
[certTypes.apisMicroservices]: apisMicroservicesId,
[certTypes.infosecQa]: infosecQaId,
[certTypes.fullStack]: fullStackId
[certTypes.fullStack]: fullStackId,
[certTypes.sciCompPy]: sciCompPyId,
[certTypes.dataAnalysisPy]: dataAnalysisPyId,
[certTypes.machineLearningPy]: machineLearningPyId
};
const certText = {
@ -137,7 +149,10 @@ const certText = {
[certTypes.jsAlgoDataStruct]: 'JavaScript Algorithms and Data Structures',
[certTypes.dataVis2018]: 'Data Visualization',
[certTypes.apisMicroservices]: 'APIs and Microservices',
[certTypes.infosecQa]: 'Information Security and Quality Assurance'
[certTypes.infosecQa]: 'Information Security and Quality Assurance',
[certTypes.sciCompPy]: 'Scientific Computing with Python',
[certTypes.dataAnalysisPy]: 'Data Analysis with Python',
[certTypes.machineLearningPy]: 'Machine Learning with Python'
};
const completionHours = {
@ -150,7 +165,10 @@ const completionHours = {
[certTypes.jsAlgoDataStruct]: 300,
[certTypes.dataVis2018]: 300,
[certTypes.apisMicroservices]: 300,
[certTypes.infosecQa]: 300
[certTypes.infosecQa]: 300,
[certTypes.sciCompPy]: 400,
[certTypes.dataAnalysisPy]: 400,
[certTypes.machineLearningPy]: 400
};
function getIdsForCert$(id, Challenge) {
@ -174,7 +192,10 @@ function sendCertifiedEmail(
isJsAlgoDataStructCert,
isDataVisCert,
isApisMicroservicesCert,
isInfosecQaCert
isInfosecQaCert,
isSciCompPyCert,
isDataAnalysisPyCert,
isMachineLearningPyCert
},
send$
) {
@ -185,7 +206,10 @@ function sendCertifiedEmail(
!isJsAlgoDataStructCert ||
!isDataVisCert ||
!isApisMicroservicesCert ||
!isInfosecQaCert
!isInfosecQaCert ||
!isSciCompPyCert ||
!isDataAnalysisPyCert ||
!isMachineLearningPyCert
) {
return Observable.just(false);
}
@ -216,7 +240,10 @@ function getUserIsCertMap(user) {
isFrontEndCert = false,
isBackEndCert = false,
isDataVisCert = false,
isFullStackCert = false
isFullStackCert = false,
isSciCompPyCert = false,
isDataAnalysisPyCert = false,
isMachineLearningPyCert = false
} = user;
return {
@ -229,7 +256,10 @@ function getUserIsCertMap(user) {
isFrontEndCert,
isBackEndCert,
isDataVisCert,
isFullStackCert
isFullStackCert,
isSciCompPyCert,
isDataAnalysisPyCert,
isMachineLearningPyCert
};
}
@ -350,6 +380,9 @@ function createShowCert(app) {
is2018DataVisCert: true,
isApisMicroservicesCert: true,
isInfosecQaCert: true,
isSciCompPyCert: true,
isDataAnalysisPyCert: true,
isMachineLearningPyCert: true,
isHonest: true,
username: true,
name: true,

View File

@ -167,6 +167,9 @@ function postResetProgress(req, res, next) {
isBackEndCert: false,
isDataVisCert: false,
isFullStackCert: false,
isSciCompPyCert: false,
isDataAnalysisPyCert: false,
isMachineLearningPyCert: false,
completedChallenges: []
},
function(err) {

View File

@ -8,5 +8,8 @@
"jsAlgoDataStruct": "isJsAlgoDataStructCert",
"apisMicroservices": "isApisMicroservicesCert",
"infosecQa": "isInfosecQaCert",
"fullStack": "isFullStackCert"
"fullStack": "isFullStackCert",
"sciCompPy": "isSciCompPyCert",
"dataAnalysisPy": "isDataAnalysisPyCert",
"machineLearningPy": "isMachineLearningPyCert"
}

View File

@ -2,10 +2,13 @@
"frontEndCert": "Front End Development Certification",
"backEndCert": "Back End Development Certification",
"fullStackCert": "Full Stack Development Certification",
"respWebDesign": "Responsive Web Design Certification",
"frontEndLibs": "Front End Libraries Certification",
"jsAlgoDataStruct": "JavaScript Algorithms and Data Structures Certification",
"dataVis": "Data Visualisation Certification",
"apisMicroservices": "APIs and Microservices Certification",
"infosecQa": "Information Security and Quality Assurance Certification"
"respWebDesignCert": "Responsive Web Design Certification",
"frontEndLibsCert": "Front End Libraries Certification",
"jsAlgoDataStructCert": "JavaScript Algorithms and Data Structures Certification",
"dataVisCert": "Data Visualisation Certification",
"apisMicroservicesCert": "APIs and Microservices Certification",
"infosecQaCert": "Information Security and Quality Assurance Certification",
"sciCompPyCert": "Scientific Computing with Python Certification",
"dataAnalysisPyCert": "Data Analysis with Python Certification",
"machineLearningPyCert": "Machine Learning with Python Certification"
}

View File

@ -17,7 +17,10 @@ export function completeCommitment$(user) {
isJsAlgoDataStructCert,
isDataVisCert,
isApisMicroservicesCert,
isInfosecQaCert
isInfosecQaCert,
isSciCompPyCert,
isDataAnalysisPyCert,
isMachineLearningPyCert
} = user;
return Observable.fromNodeCallback(user.pledge, user)().flatMap(pledge => {
@ -36,7 +39,10 @@ export function completeCommitment$(user) {
(isJsAlgoDataStructCert && goal === commitGoals.jsAlgoDataStructCert) ||
(isDataVisCert && goal === commitGoals.dataVisCert) ||
(isApisMicroservicesCert && goal === commitGoals.apisMicroservicesCert) ||
(isInfosecQaCert && goal === commitGoals.infosecQaCert)
(isInfosecQaCert && goal === commitGoals.infosecQaCert) ||
(isSciCompPyCert && goal === commitGoals.sciCompPyCert) ||
(isDataAnalysisPyCert && goal === commitGoals.dataAnalysisPyCert) ||
(isMachineLearningPyCert && goal === commitGoals.machineLearningPyCert)
) {
debug('marking goal complete');
pledge.isCompleted = true;

View File

@ -11,5 +11,8 @@
"jsAlgoDataStructId": "561abd10cb81ac38a17513bc",
"apisMicroservicesId": "561add10cb82ac38a17523bc",
"infosecQaId": "561add10cb82ac38a17213bc",
"fullStackId": "561add10cb82ac38a17213bd"
"fullStackId": "561add10cb82ac38a17213bd",
"sciCompPyId": "5e44431b903586ffb414c951",
"dataAnalysisPyId": "5e46fc95ac417301a38fb934",
"machineLearningPyId": "5e46fc95ac417301a38fb935"
}

View File

@ -5,7 +5,10 @@ function getCompletedCertCount(user) {
'isFrontEndLibsCert',
'isInfosecQaCert',
'isJsAlgoDataStructCert',
'isRespWebDesignCert'
'isRespWebDesignCert',
'isSciCompPyCert',
'isDataAnalysisPyCert',
'isMachineLearningPyCert'
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
}

View File

@ -25,6 +25,9 @@ export const publicUserProps = [
'isInfosecQaCert',
'isJsAlgoDataStructCert',
'isRespWebDesignCert',
'isSciCompPyCert',
'isDataAnalysisPyCert',
'isMachineLearningPyCert',
'linkedin',
'location',
'name',

View File

@ -13,7 +13,10 @@ const superBlockCertTypeMap = {
'data-visualization': certTypes.dataVis2018,
'apis-and-microservices': certTypes.apisMicroservices,
'information-security-and-quality-assurance': certTypes.infosecQa,
'full-stack': certTypes.fullStack
'full-stack': certTypes.fullStack,
'scientific-computing-with-python': certTypes.sciCompPy,
'data-analysis-with-python': certTypes.dataAnalysisPy,
'machine-learning-with-python': certTypes.machineLearningPy
};
export default superBlockCertTypeMap;

View File

@ -144,7 +144,10 @@ function getCompletedCertCount(user) {
'isFrontEndLibsCert',
'isInfosecQaCert',
'isJsAlgoDataStructCert',
'isRespWebDesignCert'
'isRespWebDesignCert',
'isSciCompPyCert',
'isDataAnalysisPyCert',
'isMachineLearningPyCert'
].reduce((sum, key) => (user[key] ? sum + 1 : sum), 0);
}