Oppia a free, online learning platform to make quality education accessible for all.

Overview

Oppia Actions CircleCI Join the chat at https://gitter.im/oppia/oppia-chat

Oppia is an online learning tool that enables anyone to easily create and share interactive activities (called 'explorations'). These activities simulate a one-on-one conversation with a tutor, making it possible for students to learn by doing while getting feedback.

In addition to developing the Oppia platform, the team is also developing and piloting a set of free and effective lessons on basic mathematics. These lessons are targeted at learners who lack access to educational resources.

Oppia is written using Python and AngularJS, and is built on top of Google App Engine.

Installation

Please refer to the Installing Oppia page for full instructions.

Contributing

The Oppia project is built by the community for the community. We welcome contributions from everyone, especially new contributors.

You can help with Oppia's development in many ways, including art, coding, design and documentation.

Support

If you have any feature requests or bug reports, please log them on our issue tracker.

Please report security issues directly to [email protected].

License

The Oppia code is released under the Apache v2 license.

Keeping in touch

We also have public chat rooms on Gitter: https://gitter.im/oppia/oppia-chat. Drop by and say hello!

Comments
  • Migrate AngularJS services to Angular 8

    Migrate AngularJS services to Angular 8

    The Oppia project is currently in a hybrid state where we are currently using both Angular 8 and AngularJS. This makes our application slow and bulky, partly because several third-party libraries need to be duplicated (since many of the AngularJS libraries are not compatible with Angular).

    The aim of this issue is to migrate services still using AngularJS to modern Angular 8. The benefits of doing this are:

    • Improved Developer Experience:
      • Developing when the application is a hybrid state opens us to a whole host of complicated errors which are, in some cases, not possible to solve.
      • AngularJS is deprecated, whereas Angular 8 is being actively maintained, and includes lots of new functionality that aids in developing new features.
    • Improved User Experience:
      • When the codebase is completely migrated, the developers can focus their efforts on making new features for the website rather than fixing errors that pop up due to the hybrid state.
      • There will be a decrease in page loading times since we can drop one of the frameworks completely. This will also lead to better application performance in general.

    The instructions on how to migrate a service can be found here. You can use #9984 and #10693 as reference examples.

    Listed below are the files which the Angular team believes can be migrated without major blockers, but please feel free to reach out on Gitter if you run into any problems. If you want to work on any unclaimed service in this tracker, please add a comment in this thread and tag @srijanreddy98, and we'll add you as an assignee. It will be all yours then. This is done so that we don't have any duplication of work.

    Also, after migrating a service, make sure to manually test it. In case you don't know how to access that part of the codebase on the website, please contact your onboarding mentor or @srijanreddy98. Thanks!

    Unclaimed:

    • [ ] story-creation.service.ts @ShivamJhaa
    • [ ] entity-creation.service.ts @heyimShivam

    Done:

    • [x] story-update.service.ts - @Radesh-kumar
    • [x] translation-tab-active-content-id.service.ts @Radesh-kumar (#11760)
    • [x] state-tutorial-first-time.service.ts
    • [x] editable-exploration-backend-api.service.ts - @srijanreddy98
    • [x] search.service.ts
    • [x] QuestionObjectFactory.ts
    • [x] translation-language.service.ts
    • [x] story-editor-state.service.ts
    • [x] skill-update.service.ts
    • [x] fatigue-detection.service.ts - @atpug22
    • [x] learner-answer-info.service.ts @aishwary023
    • [x] admin-config-tab-backend-api.service.ts @ReshuKumari
    • [x] skill-backend-api.service.ts - @nishantwrp
    • [x] editable-topic-backend-api.service.ts - @jyan500
    • [x] skill-mastery-backend-api.service.ts @Showtim3
    • [x] subtopic-viewer-backend-api.service.ts @bansalnitish
    • [x] search-explorations-backend-api.service.ts @vikasprashar99
    • [x] editable-story-backend-api.service.ts
    • [x] contribution-opportunities-backend-api.service.ts @srijanreddy98
    • [x] SkillObjectFactory.ts @abhayraghuwanshi
    • [x] collection-rights-backend-api.service.ts @h-ARTS
    • [x] read-only-collection-backend-api.service.ts @bansalnitish
    • [x] editable-collection-backend-api.service.ts @bansalnitish
    • [x] expression-syntax-tree.service.ts @h-ARTS
    • [x] playthrough-issues-backend-api.service.ts @vinayakvvg
    • [x] learner-answer-details-backend-api.service.ts @vinayakvvg
    • [x] question-backend-api.service.ts @bansalnitish
    • [x] question-creation.service.ts @bansalnitish
    • [x] PlaythroughService.ts @ankita240796
    • [x] exploration-recommendations.service.ts @ankita240796
    • [x] user-exploration-permissions.service.ts @ankita240796
    • [x] skill-rights-backend-api.service.ts @abhayraghuwanshi
    • [x] stats-reporting.service.ts @ankita240796
    • [x] topics-and-skills-dashboard-backend-api.service.ts @Rajat012k
    • [x] concept-card-backend-api.service.ts @nadintamer
    • [x] collection-creation-backend-api.service.ts
    frontend PR CHANGELOG: Angular Migration -- @srijanreddy98 enhancement 
    opened by tyleri 336
  • Test frontend services

    Test frontend services

    This is intended as a starter project for newer contributors but if you're already a contributor for some time, you can help as well.

    NOTE: Please ping @nithusha21 if you have any questions about this issue or would like to be assigned to some part of it.

    In order to prevent future regressions, we want to ensure that all services in our frontend codebase are thoroughly tested. If it's your first time here, please read carefully the guide of how to get started with frontend unit testing: Guide for writing frontend tests. Please use this guide as your helper, all the instructions of how to test properly is in it.

    Also, here is Oppia's wiki page for running the client-side Karma tests.

    The services are separated by three levels of complexity: | Complexity | Easy | Medium | Hard | |:---------------:|:----------------:|:---------------:|:------------------:| | Number of lines | up to 100 lines | up to 250 lines | at least 250 lines |

    Then, it doesn't matter if you're new to unit test or if you're looking for something more challenging, there will be service for you work with.

    Each file is marked with two information that will help you to decide which service to pick. For example:

    • [ ] A - B service-name.service.ts

    A means the service complexity: E for Easy, M for medium and H for Hard. B means if the service has a spec file: Y for Yes and N for No.

    Spec files for services tests consist of the name of the service, followed by .spec.ts or Spec.ts, it depends of the service file name structure:

    • Use .spec.ts for services like: service-name.service.ts
    • Use Spec.ts for services like: ServiceNameService.ts When writing tests, if a spec file already exists for the service you have picked, then edit the existing file. If a spec file isn't present yet, create a new file and name it accordingly. You can also take a look at the existing spec files for different services to get an idea on how to get started.

    Note: We are currently in the process of upgrading AngularJS to Angular. If the service is written in AngularJS, write the test in AngularJS. If the service is written in Angular, write the test in Angular. We would also prefer to cover all Angular files before moving to AngularJS files to prevent extra work during the migration.

    If you'd like to help with this issue, please select a file from the list below, comment on the thread with the file name or any query you'd like to be assigned, and submit a PR when you've completed writing the test. Once the PR is submitted, you can tick the checkboxes.

    PR's for reference: #4135 #8916 #8934


    Files to write tests for or increase until 100%:

    Angular files

    • core/templates
      • components/graph-services
        • [ ] H - N graph-layout.service.ts
      • components/state-editor
        • [ ] M - Y state-editor.service.ts @Deepam101
        • [ ] M - Y state-property.service.ts
      • domain/collection
        • [ ] M - Y collection-node.model.ts @Nisarg-Chaudhari
        • [ ] H - Y collection.model.ts
        • [ ] E - N collection-playthrough.model.ts @karthikshetty03
        • [ ] M - Y editable-collection-backend-api.service.ts
        • [ ] M - Y read-only-collection-backend-api.service.ts
      • domain/question
        • [ ] E - Y pretest-question-backend-api.service.ts @wcascades
      • domain/skill
        • [ ] H - Y SkillObjectFactory.ts
      • domain/state_card
        • [ ] M - Y StateCardObjectFactory.ts
      • domain/story
        • [ ] M - Y editable-story-backend-api.service.ts @kaushambisharma
        • [ ] H - Y StoryContentsObjectFactory.ts
        • [ ] H - Y story-node.model.ts
      • domain/topic
        • [ ] M - Y SubtopicObjectFactory.ts
        • [ ] M - Y SubtopicPageObjectFactory.ts
        • [ ] H - Y TopicObjectFactory.ts
      • domain/topics_and_skills_dashboard
        • [ ] E - Y topics-and-skills-dashboard-backend-api.service.ts @michaelw54
      • domain/utilities
        • [ ] M - Y language-util.service.ts @laujamie
        • [ ] M - Y url-interpolation.service.ts
      • expressions
        • [ ] M - Y expression-evaluator.service.ts
        • [ ] M - Y expression-interpolation.service.ts
      • pages/community-dashboard-page
        • [ ] M - Y contribution-opportunities-backend-api.service.ts
      • pages/email-dashboard-pages
        • [ ] M - Y email-dashboard-data.service.ts @siddharthmehta02
      • pages/exploration-editor-page
        • [ ] H - N exploration-diff.service.ts
        • [ ] M - Y version-tree.service.ts
    • pages/exploration-player-page
      • [x] E - Y audio-translation-manager.service.ts @Nik-09
      • [ ] M - Y answer-classification.service.ts
      • [ ] M - Y audio-preloader.service.ts
      • [ ] M - Y current-interaction.service.ts
      • [ ] E - N exploration-recommendations.service.ts @TheoLipeles
      • [ ] M - Y learner-answer-info.service.ts
      • [ ] E - N player-correctness-feedback-enabled.service.ts @soumyo123-prog
      • [ ] M - Y player-transcript.service.ts
      • [ ] H - N question-player-engine.service.ts @ehwu
      • [ ] H - N stats-reporting.service.ts
    • pages/story-editor-page
      • [ ] M - Y story-editor-state.service.ts
    • services
      • [ ] E - N autogenerated-audio-player.service.ts
      • [ ] H - Y context.service.ts @HarshKhilawala
      • [ ] E - Y csrf-token.service.ts @Nik-09
      • [ ] E - Y html-escaper.service.ts @Nik-09
      • [ ] M - N messenger.service.ts
      • [ ] E - Y promo-bar-backend-api.service.ts @tanishq67
      • [ ] M - N request-interceptor.service.ts
      • [ ] M - Y state-top-answers-stats.service.ts
      • [ ] E - Y utils.service.ts @HarshKhilawala
    • extensions
      • classifiers
        • [ ] H - Y python-program.tokenizer.ts
        • [ ] H - Y svm-prediction.service.ts
      • extensions
        • [ ] M - N base-interaction-validation.service.ts
        • [ ] H - Y code-repl-prediction.service.ts
        • [ ] E - Y continue-rules.service.ts
        • [ ] M - Y drag-and-drop-sort-input-validation.service.ts
        • [ ] E - N end-exploration-rules.service.ts @SAEb-ai
        • [ ] H - Y fraction-input-validation.service.ts
        • [ ] E - N graph-detail.service.ts @safwan20
        • [ ] M - Y graph-input-rules.service.ts
        • [ ] M - Y graph-input-validation.service.ts
        • [ ] M - N graph-utils.service.ts @atpug22
        • [ ] M - Y item-selection-input-validation.service.ts
        • [ ] M - Y music-notes-input-rules.service.ts
        • [ ] E - N music-phrase-player.service.ts @HarshKhilawala
        • [ ] M - Y number-with-units-validation.service.ts @akshayrathi2102
        • [ ] M - Y numeric-input-validation.service.ts @EeshaArif

    AngularJS files

    • core/templates
      • components/entity_creation
        • [ ] M - N exploration-creation.service.ts
        • [ ] E - N skill-creation.service.ts @LakmaNeha
        • [ ] E - N story-creation.service.ts @taiwo2
        • [ ] E - N topic-creation.service.ts
      • domain/collection
        • [ ] H - Y collection-update.service.ts
      • domain/question
        • [ ] M - Y question-update.service.ts
      • domain/skill
        • [ ] H - Y skill-update.service.ts
      • domain/story
        • [ ] H - Y story-update.service.ts
      • pages/community-dashboard-page
        • [ ] M - Y contribution-and-review.service.ts
        • [ ] E - N contribution-opportunities.service.ts
        • [ ] M - N translate-text.service.ts
      • pages/exploration-editor-page
        • [ ] M - N change-list.service.ts
        • [ ] H - N exploration-save.service.ts
        • [ ] H - Y exploration-states.service.ts
        • [ ] E - N state-tutorial-first-time.service.ts @safwan20
        • [ ] M - N suggestion-modal-for-exploration-editor.service.ts
        • [ ] M - N voiceover-recording.service.ts
      • pages/exploration-player-page
        • [ ] H - N exploration-engine.service.ts
        • [ ] H - Y exploration-player-state.service.ts
        • [ ] E - N fatigue-detection.service.ts
        • [ ] M - N hint-and-solution-modal.service.ts @Radesh-kumar
        • [ ] M - Y learner-answer-info.service.ts
        • [ ] E - N refresher-exploration-confirmation-modal.service.ts
        • [ ] M - N suggestion-modal-for-exploration-player.service.ts
      • pages/skill-editor-page
        • [ ] M - Y skill-editor-state.service.ts
      • pages/topic_editor
        • [ ] topic-editor-state.service.ts
      • services
        • [ ] M - N audio-player.service.ts
        • [ ] E - Y image-upload-helper.service.tests @sachinchauhan2889
        • [ ] E - N translation-file-hash-loader.service.ts

    Click to see the list of completed work.
    • components/forms
      • [x] FormBuilder.js -- @unit-00
    • components/state_editor
      • [x] StateParamChangesService.ts @safwan20
      • [x] StateHintsService.ts @safwan20
      • [x] StateNameService.ts @safwan20
    • domain/classifier
      • [x] AnswerClassificationResultObjectFactory.js @jervis446 #4305
      • [x] ClassifierObjectFactory.js @jervis446 #4305
      • [x] PredictionResultObjectFactory.ts @marianazangrossi
    • domain/classroom
      • [x] E - Yclassroom-backend-api.service.ts @krishnarao22
    • domain/collection
      • [x] CollectionRightsBackendApiService.ts @marianazangrossi
      • [x] CollectionRightsObjectFactory.ts @marianazangrossi
      • [x] CollectionValidationService.ts @marianazangrossi
    • domain/creator_dashboard
      • [x] CreatorDashboardBackendApiService.ts @marianazangrossi
    • domain/exploration
      • [x] AnswerStatsObjectFactory.ts @marianazangrossi
      • [x] ExplorationObjectFactory.ts @marianazangrossi
      • [x] HintObjectFactory.js @YashJipkate
      • [x] InteractionObjectFactory.js @YashJipkate
      • [x] OutcomeObjectFactory.js @abhaygupta97
      • [x] ParamChangeObjectFactory.ts @marianazangrossi
      • [x] ParamChangesObjectFactory.ts - @lakshay-angrish
      • [x] ParamSpecObjectFactory.ts @marianazangrossi
      • [x] ParamSpecsObjectFactory.ts @marianazangrossi
      • [x] RuleObjectFactory.ts @abhayraghuwanshi
      • [x] SolutionObjectFactory.ts @marianazangrossi
      • [x] TriggerObjectFactory.js @17bcs029 (removed the file)
      • [x] WrittenTranslationsObjectFactory.ts @marianazangrossi
    • domain/learner_dashboard
      • [x] LearnerDashboardActivityIdsObjectFactory @marianazangrossi
      • [x] LearnerDashboardBackendApiService.js @nithusha21 @marianazangrossi
      • [x] LearnerDashboardIdsBackendApiService.js @nithusha21 @marianazangrossi
      • [x] LearnerPlaylistService.js @nithusha21 #4135
    • domain/objects
      • [x] UnitsObjectFactory.ts - @felicityzhao99
    • domain/question
      • [x] EditableQuestionBackendApiService.ts @marianazangrossi
      • [x] QuestionBackendApiService.ts @jimbyo
      • [x] QuestionObjectFactory.ts @jimbyo
    • domain/sidebar @WickedBrat #4520
      • [x] SidebarStatusService.js
    • domain/skill
      • [x] ConceptCardBackendApiService.ts @marianazangrossi
      • [x] EditableSkillBackendApiService.ts @marianazangrossi
      • [x] MisconceptionObjectFactory.ts @marianazangrossi
      • [x] SkillRightsObjectFactory.ts @marianazangrossi
      • [x] SkillRightsBackendApiService.ts @marianazangrossi
    • domain/state
      • [x] StateObjectFactory.ts @marianazangrossi
    • domain/statistics
      • [x] FeedbackImprovementTaskObjectFactory.ts @marianazangrossi
      • [x] PlaythroughImprovementTaskObjectFactory.ts @marianazangrossi
      • [x] SuggestionImprovementTaskObjectFactory.ts @marianazangrossi
    • domain/suggestion
      • [x] SuggestionThreadObjectFactory.ts @marianazangrossi
    • domain/summary
      • [x] ExplorationSummaryBackendApiService.ts @marianazangrossi
    • domain/topic
      • [x] EditableTopicBackendApiService.ts @marianazangrossi
      • [x] TopicRightsBackendApiService.ts @marianazangrossi
      • [x] TopicRightsObjectFactory.ts @marianazangrossi
    • domain/user
      • [x] UserInfoObjectFactory.ts
    • domain/utilities
      • [x] AudioLanguageObjectFactory.js @hoangviet1993
      • [x] AutogeneratedAudioLanguageObjectFactory.js @hoangviet1993
      • [x] BrowserCheckerService.ts @marianazangrossi
    • pages/creator_dashboard
      • [x] SuggestionModalForCreatorViewService.ts @marianazangrossi
    • pages/exploration_editor
      • [x] AnswerGroupsCacheService.js @vinitamurthi
      • [x] AutosaveInfoModalService.ts @marianazangrossi
      • [x] ChangesInHumanReadableFormService.ts @marianazangrossi
      • [x] CompareVersionService.ts @marianazangrossi
      • [x] EditorFirstTimeEventsService.ts @marianazangrossi
      • [x] E - N exploration-category.service.ts @safwan20
      • [x] ExplorationCorrectnessFeedbackService.ts @marianazangrossi
      • [x] ExplorationDataService.ts @marianazangrossi
      • [x] ExplorationPropertyService.ts @marianazangrossi
      • [x] ExplorationRightsService.ts @marianazangrossi
      • [x] E - N exploration-tags.service.ts @safwan20
      • [x] ExplorationWarningsService.ts @marianazangrossi
      • [x] GraphDataService.ts @marianazangrossi
      • [x] InteractionDetailsCacheService.js @vinitamurthi
      • [x] ImprovementModalService.ts @marianazangrossi
      • [x] LearnerAnswerDetailsDataService.ts @marianazangrossi
      • [x] ParameterMetadataService.ts @marianazangrossi
      • [x] ResponsesService.ts @marianazangrossi
      • [x] RouterService.ts @marianazangrossi
      • [x] SolutionVerificationService.ts @marianazangrossi
      • [x] ThreadDataService.ts @marianazangrossi
      • [x] ThreadStatusDisplayService.js @paroothisumit #4606
      • [x] TranslationLanguageService.ts @marianazangrossi
      • [x] UserEmailPreferencesService.ts @Arnesh07 pages/exploration_player
      • [x] AudioTranslationLanguageService.ts @marianazangrossi
      • [x] HitsAndSolutionManager.service.ts @marianazangrossi
      • [x] ImagePreloaderService.ts @marianazangrossi
      • [x] StateClassifierMappingService.ts @marianazangrossi pages/skill_editor
      • [x] SkillEditorRoutingService.ts @marianazangrossi
    • services
      • [x] AlertsService.ts @marianazangrossi
      • [x] AssetsBackendApiService.ts @marianazangrossi
      • [x] AutoplayedVideosService.js @proishan11 #4805
      • [x] BackgroundMaskService.js @aks681
      • [x] CodeNormalizerService.ts @marianazangrossi
      • [x] ConstructTranslationIdsService.ts @marianazangrossi
      • [x] EditabilityServices.js @square-1111
      • [x] E - N exploration-features.service.ts @abhayraghuwanshi
      • [x] IdGenerationService.js @lilithxxx
      • [x] DateTimeFormatService.ts @marianazangrossi
      • [x] DebouncerService.ts @marianazangrossi
      • [x] DeviceInfoService.ts @marianazangrossi
      • [x] DocumentAttributeCustomizationService.ts @marianazangrossi
      • [x] ExtensionTagAssemblerService.ts @marianazangrossi
      • [x] FocusManagerService.js @aks681
      • [x] LocalStorageService.ts @marianazangrossi
      • [x] LoggerService.ts @marianazangrossi
      • [x] MetaTagCustomizationService.ts @marianazangrossi
      • [x] NavigationService.ts @marianazangrossi
      • [x] NestedDirectivesRecursionTimeoutPreventionService.ts @marianazangrossi
      • [x] PageTitleService.ts @marianazangrossi
      • [x] PlayerPositionService.js @ujjwalgulecha
      • [x] PlaythroughIssuesBackendApiService.ts @marianazangrossi
      • [x] PlaythroughIssuesService.ts @marianazangrossi
      • [x] QuestionsListService.ts @marianazangrossi
      • [x] RteHelperService.ts @marianazangrossi
      • [x] SchemaDefaultValueService.ts @marianazangrossi
      • [x] SchemaUndefinedLastElementService.ts @marianazangrossi
      • [x] SearchService.ts @marianazangrossi
      • [x] SiteAnalyticsService.ts @marianazangrossi
      • [x] SpeechSynthesisChunkerService.ts @marianazangrossi
      • [x] SuggestionModalService.ts @marianazangrossi
      • [x] TrainingDataEditorPainelService.ts @marianazangrossi
      • [x] TrainingModalService.ts @marianazangrossi
      • [x] UrlService.ts @marianazangrossi
      • [x] UserService.ts @marianazangrossi
      • [x] ValidatorsService.ts @marianazangrossi
      • [x] WindowDimensionsService.ts @marianazangrossi
      • [x] WindowRefService.ts @marianazangrossi
    • components/ratings
      • [x] E - Y rating-computation.service.ts @laujamie
    • domain/editor
      • [x] M - N base-undo-redo.service.ts
      • [x] E - N question-undo-redo.service.ts @safwan20
    • domain/exploration
      • [x] M - N AnswerGroupObjectFactory.ts @safwan20
      • [x] M - Y editable-exploration-backend-api.service.ts @shavavo
      • [x] M - Y RecordedVoiceoversObjectFactory.ts @shavavo
      • [x] M - Y StatesObjectFactory.ts @kevjumba
    • domain/feedback_thread
      • [x] M - Y FeedbackThreadSummaryObjectFactory.ts
    • domain/objects
      • [x] H - Y NumberWithUnitsObjectFactory.ts Other services:
    • [x] E - N collection-creation.service.ts @Hadyn
    • [x] E - N exploration-embed-button.service.ts
    • [x] E - N question-creation.service.ts @mhotiger
    • [x] E - N state-content.service.ts @safwan20
    • [x] E - N state-customization-args.service.ts @safwan20
    • [x] E - N state-interaction-id.service.ts @safwan20
    • [x] E - N state-recorded-voiceovers.service.ts @safwan20
    • [x] E - N state-solicit-answer-details.service.ts @safwan20
    • [x] E - N state-solution.service.ts @safwan20
    • [x] E - N state-written-translations.service.ts @safwan20
    • [x] M - Y ConceptCardObjectFactory.ts
    • [x] E - Y SkillDifficultyObjectFactory.ts @tianqi-wu
    • domain/statistics
      • [x] E - Y learner-answer-details-backend-api.service.ts @arpit1912
    • domain/story_viewer
      • [x] E - Y story-viewer-backend-api.service.ts @EricZLou
      • [x] H - Y topic-update.service.ts @shavavo
      • [x] E - N AudioFileObjectFactory.ts @safwan20
      • [x] E - N FileDownloadRequestObjectFactory.ts @safwan20
      • [x] E - N ImageFileObjectFactory.ts @safwan20
      • [x] H - Y expression-syntax-tree.service.ts @mertdeg2
      • [x] E - Y expression-type-parser.service.ts
      • [x] M - Y collection-editor-state.service.ts
      • [x] E - N question-suggestion.service.ts
      • [x] E - N exploration-automatic-text-to-speech.service.ts @safwan20
      • [x] E - N exploration-init-state-name.service.ts
      • [x] E - N exploration-language-code.service.ts
      • [x] E - N exploration-objective.service.ts
      • [x] E - N exploration-param-changes.service.ts @safwan20
      • [x] E - N exploration-param-specs.service.ts @safwan20
      • [x] E - N exploration-title.service.ts
      • [x] E - Y state-improvement-suggestion.service.ts
      • [x] E - Y player-position.service.ts @tianqi-wu
      • [x] E - Y prediction-algorithm-registry.service.ts @rriyaldhi
      • [x] E - N suggestion-modal-for-learner-dashboard.service.ts @hulyak
      • [x] TopicEditorRoutingService.ts @amanbora
      • [x] E - N compute-graph.service.ts
      • [x] E - Y improvement-task.service.ts
      • [x] H - Y playthrough.service.ts
      • [x] E - N pencil-code-editor-validation.service.ts @safwan20

    Note: For a guide on how to access Oppia's webpages, see this.

    frontend good first issue 
    opened by shubha1593 313
  • Write schemas for handler class arguments

    Write schemas for handler class arguments

    Introduction

    For working on this issue you are supposed to write schemas for the handler arguments. To learn how to write schema for handler arguments please visit wiki page.
    For making a contribution follow the steps given below.

    Getting Assigned.

    Select some handlers from the list given below and ask @Nik-09 or @sahiljoster32 to assign them handlers to you.

    List of handler classes to work

    List of assigned handler classes.

    • [x] ValueGeneratorHandler @yurilemos
    • [x] SkillDescriptionHandler @Sean-Zhong
    • [x] SubtopicPageDataHandler @AxelGard
    • [x] QuestionPlayerHandler @Kalpani90
    • [x] ValidateExplorationsHandler @bilbosf
    • [x] LearnerAnswerDetailsSubmissionHandler @bilbosf
    • [x] ResubmitSuggestionHandler @bilbosf
    • [x] StartedTranslationTutorialEventHandler @murilo-goncalves
    • [x] AssetDevHandler @murilo-goncalves
    • [x] EditableStoryDataHandler @murilo-goncalves
    • [x] AudioUploadHandler @adamhalim
    • [ ] InstantFeedbackMessageEmailHandler
    • [x] NewTopicHandler @richard-johansson
    • [x] NewSkillHandler @Sean-Zhong
    • [x] StateCompleteEventHandler @gnurris
    • [x] LeaveForRefresherExpEventHandler @gnurris
    • [x] SuggestionEmailHandler @gnurris
    • [x] SkillDataHandler @aaronlwan
    • [x] SubtopicViewerPage @adityanarayanm095
    • [x] EditableQuestionDataHandler @Dorothy2020
    • [ ] QuestionCreationHandler
    • [x] QuestionSkillLinkHandler @yavik-kapadia
    • [x] RecentCommitsHandler @yavik-kapadia
    • [x] QuestionCountDataHandler @yavik-kapadia
    • [x] UserSubmittedSuggestionsHandler @Dorothy2020
    • [x] SuggestionListHandler @ujjwalban
    • [x] UpdateTranslationSuggestionHandler @JianyiGao
    • [x] UpdateQuestionSuggestionHandler @JianyiGao
    • [ ] UnsentFeedbackEmailHandler
    • [ ] FeedbackThreadStatusChangeEmailHandler
    • [ ] FlagExplorationEmailHandler
    • [x] TopicViewerPage @adityanarayanm095
    • [x] TopicPageDataHandler @Nivig1310
    • [x] TopicsAndSkillsDashboardPage @Nivig1310
    • [x] MergeSkillHandler @jellyyams

    List of completed handler classes.

    Hidden list of completed handler classes - [x] RecommendationsHandler @qinghaoyang - [x] ReaderFeedbackHandler @qinghaoyang - [x] UsernameCheckHandler @qinghaoyang - [x] QuestionsListHandler @adityanarayanm095 - [x] AnswerSubmittedEventHandler @AmanJolly16 - [x] SkillMasteryDataHandler @davisong - [x] SiteLanguageHandler @gopivaibhav - [x] UserInfoHandler @Aayush452-cell - [x] UrlHandler @gopivaibhav - [x] FetchSkillsHandler @Aayush452-cell - [x] ExportAccountHandler @AmanJolly16 - [x] TopicEditorStoryHandler @subhash686 - [x] TopicEditorPage @subhash686 - [x] EditableSubtopicPageDataHandler @subhash686 - [x] EditableTopicDataHandler @subhash686 - [x] TopicRightsHandler @subhash686 - [x] TopicPublishSendMailHandler @subhash686 - [x] TopicPublishHandler @subhash686 - [x] TopicUrlFragmentHandler @subhash686 - [x] TopicNameHandler @subhash686 - [x] SolutionHitEventHandler @SD-13 - [x] ExplorationCompleteEventHandler @SD-13 - [x] ExplorationMaybeLeaveHandler @SD-13 - [x] EditableSkillDataHandler @AmanJolly16 - [x] ExplorationEmbedPage @Sreelayavuyyuru - [x] StateHitEventHandler @anurag629 - [x] SkillEditorPage @ayushjaink8 - [x] SkillRightsHandler @ayushjaink8 - [x] ProfileHandler @SD-13 - [x] PreferencesHandler @SD-13 - [x] SignupHandler @SD-13 - [x] ReviewableSuggestionsHandler @anthonyqzhu - [x] StoryUrlFragmentHandler @SanjaySajuJacob - [x] PreferencesPage @SD-13 - [x] ProfilePictureHandlerByUsernameHandler @mahendra1290 - [x] SkillsDashboardPageDataHandler @kalkas98 - [x] ProfilePictureHandler @mahendra1290 - [x] TopicsAndSkillsDashboardPageDataHandler @kalkas98 - [x] TopicAssignmentsHandler @kalkas98 - [x] FlagExplorationHandler @SD-13 - [x] RatingHandler @SD-13 - [x] SignupPage @AmanJolly16 - [x] ExplorationActualStartEventHandler @SanjaySajuJacob - [x] ReleaseCoordinatorPage @SD-13 - [x] ExplorationPage @Sreelayavuyyuru - [x] ExplorationStartEventHandler @SanjaySajuJacob - [x] SubscribeHandler @chiragbaid7 - [x] UnsubscribeHandler @chiragbaid7 - [x] LearnerIncompleteActivityHandler @SD-13 - [x] ExplorationHandler @Sreelayavuyyuru - [x] JobsHandler @SD-13 - [x] JobOutputHandler @SD-13 - [x] StoryProgressHandler @mahendra1290 - [x] MemoryCacheHandler @SD-13 - [x] StoryPageDataHandler @mahendra1290 - [x] StoryPage @mahendra1290 - [x] StoryEditorPage @mahendra1290 - [x] PromoBarHandler @ayushjaink8 - [x] StoryPublishHandler @mahendra1290 - [x] PretestHandler @kingjuno - [x] StorePlaythroughHandler @kingjuno - [x] StatsEventsHandler @kingjuno - [x] SuggestionHandler @chiragbaid7

    Steps to contribute

    1. Get assigned to at least 3 handlers from the list.
    2. Search that handler class in the codebase.
    3. Write the schemas for that handler by following the wiki page.
    4. Remove the name of the handler class from HANDLER_CLASS_NAMES_WHICH_STILL_NEED_SCHEMAS in handler_schema_constants.py.
    5. Create a PR.

    Examples

    https://github.com/oppia/oppia/pull/13223, https://github.com/oppia/oppia/pull/13224 https://github.com/oppia/oppia/pull/13225, https://github.com/oppia/oppia/pull/13355

    opened by Nik-09 289
  • Fixing End-to-End Tests with action.js and waitFor.js

    Fixing End-to-End Tests with action.js and waitFor.js

    Introduction

    Background

    To ensure Oppia remains available and high-quality for our students, we run end-to-end tests on all PRs to check that the site's functionality hasn't been broken. Recently, these tests have begun failing non-deterministically. This frustrates developers and slows their work by incorrectly indicating that developers’ changes are faulty. The goal of this issue is to help resolve these failures, also known as "flakes," by fixing common bad patterns in the current tests.

    Getting Started

    Review the instructions below on how to fix the tests. Then message on the issue thread asking to be assigned to one of the unclaimed files. We will assign you to the file by adding your username next to the file listing. If you have any questions, message on the issue thread, and we'll help you out!

    How to Fix Tests

    For this task, we would like you to pick one of the files listed below and make the following fixes wherever applicable:

    • Instead of calling .click() on an element, use action.click() from action.js
      • Here's an example (link):
        - await element(by.css('.protractor-test-interaction')).click();
        + var testInteractionButton = element(by.css('.protractor-test-interaction'));
        + await action.click('Test Interaction Button', testInteractionButton);
        
      • Sometimes there might be a waitFor statement before the .click() call to make sure the element has loaded before we click it. These can be removed because action.click includes waitFor statements.
    • Instead of calling .getText() on an element, use action.getText() from action.js
      • Here's an example:
        - var text = await element(by.css('.protractor-test-interaction-name')).getText();
        + var interactionNameElement = element(by.css('.protractor-test-interaction-name'));
        + var text = await action.getText('Interaction name element', interactionNameElement);
        
      • Sometimes there might be a waitFor statement before the .getText() call to make sure the element has loaded before we get its text. These can be removed because action.getText includes waitFor statements.
    • Instead of calling .clear() on an element, use action.clear() from action.js
      • Here's an example (link):
        - await stateNameInput.clear();
        + await action.clear('State Name input', stateNameInput);
        

        Note that the diff above is simplified from the linked PR for clarity.

      • Sometimes there might be a waitFor statement before the .clear() call to make sure the element has loaded before we click it. These can be removed because action.clear includes waitFor statements.
    • Instead of calling .sendKeys() on an element, use action.sendKeys() from action.js
      • Here's an example (link):
        - await stateNameInput.sendKeys(name);
        + await action.sendKeys('State Name input', stateNameInput, name);
        

        Note that the diff above is simplified from the linked PR for clarity.

      • Sometimes there might be a waitFor statement before the .sendKeys() call to make sure the element has loaded before we click it. These can be removed because action.sendKeys includes waitFor statements.
    • Use functions from waitFor.js to verify that elements have loaded before interacting with them:
      • Here's an example(link):
        + await waitFor.visibilityOf(languageSelectorLabelElement,
        +  'Language selector label element taking too long to appear');
          expect(await languageSelectorLabelElement.getText()).toBe(
            'Translations for language:');
        
      • Guidelines on finding out which elements need waitFor.js function calls: Please add waitFor statements before any code that requires an element to be present. For example, we need to wait for the element to be present before getting an element's text. In some cases you might not be able to just wait for the element to appear because the test is checking whether that element is present. In these cases, you can wait instead for another element that loads at the same time. Err on the side of adding unnecessary waitFor statements if you're unsure.

    For more guidance, see our wiki page

    Tests to Fix

    Finished Files

    • [x] core/tests/protractor/learnerFlow.js @AdityaDubey0
    • [x] core/tests/protractor_utils/AdminPage.js @mridul-netizen #10954 #10831
    • [x] core/tests/protractor_utils/ContributorDashboardPage.js @HarshKhilawala #10928 #10872
    • [x] core/tests/protractor_utils/CollectionEditorPage.js @mridul-netizen #11126
    • [x] core/tests/protractor_utils/ContributorDashboardTranslateTextTab.js @jnthn-sltn #11062 #11064
    • [x] core/tests/protractor_utils/ExplorationEditorFeedbackTab.js @suryasiriki4 #11166
    • [x] core/tests/protractor_utils/ExplorationPlayerPage.js @jimbyo #11301
    • [x] core/tests/protractor_utils/CreatorDashboardPage.js @xarcode #11145
    • [x] core/tests/protractor_utils/ExplorationEditorImprovementsTab.js @prayutsu #11619
    • [x] core/tests/protractor_utils/PreferencesPage.js @HarshKhilawala #11669
    • [x] core/tests/protractor_utils/GetStartedPage.js @prayutsu
    • [x] core/tests/protractor_utils/SubscriptionDashboardPage.js @archi15
    • [x] core/tests/protractor_utils/ProtractorConstants.js
    • [x] core/tests/protractor_utils/ThanksPage.js @Garvnanwani
    • [x] core/tests/protractor/profileMenuFlow.js @kishanhitk
    • [x] core/tests/protractor_utils/LearnerDashboardPage.js @SAEb-ai
    • [x] core/tests/protractor_utils/users.js @ashutoshc8101
    • [x] core/tests/protractor_utils/general.js @shubhamkorde
    • [x] core/tests/protractor/accessibility.js @FareesHussain
    • [x] core/tests/protractor/libraryFlow.js @kishanhitk
    • [x] core/tests/protractor_utils/ExplorationEditorHistoryTab.js @BxBxB
    • [x] core/tests/protractor_utils/LibraryPage.js @taiwo2
    • [x] core/tests/protractor_utils/ProfilePage.js @sajenjeshan1222 #12593
    • [x] core/tests/protractor_utils/ExplorationEditorMainTab.js @EeshaArif #12700
    • [x] core/tests/protractor_utils/ExplorationEditorSettingsTab.js @halsheik #12614
    • [x] core/tests/protractor_utils/ExplorationEditorTranslationTab.js @mahendra1290 #13856
    • [x] core/tests/protractor_utils/ClassroomPage.js @pankajdahiyapd #12670
    • [x] core/tests/protractor_utils/ExplorationEditorPage.js @mohithk100 #13937
    • [x] core/tests/protractor_utils/forms.js @sahiljoster32 #13924
    • [x] core/tests/protractor_utils/TopicEditorPage.js @soumyo123-prog #13887
    • [x] core/tests/protractor_utils/TopicsAndSkillsDashboardPage.js @ashish-patwal #14077
    • [x] core/tests/protractor_utils/StoryEditorPage.js @ShivamJhaa #13931
    • [x] core/tests/protractor_utils/workflow.js @KarishmaVanwari #14124
    • [x] core/tests/protractor_utils/SkillEditorPage.js @mahendra1290 #14114

    Note: For a guide on how to access Oppia's webpages, see this.

    good first issue 
    opened by U8NWXD 285
  • Finish writing remaining backend tests

    Finish writing remaining backend tests

    Note: As it was getting hard to maintain the long conversastion thread in this issue we have moved this issue to #6550

    This is intended as a starter project for newer contributors.

    We want to implement backend tests for all parts of the code that are missing them. For each file mentioned below, the parts missing can be identified by generating a coverage report (see this wiki page).

    A basic understanding of Python and the codebase would be a suggested requirement for this issue. If you have trouble trying to figure out something in the codebase, take a look at Analyzing the Codebase.

    If you'd like to help with this issue, please select a file from the list below, and comment on the issue that you'd be taking it up, and submit a PR after writing tests for the file. You can also submit a PR which has partially completed tests for a file, if the file is too extensive to test in a single PR. Once the PR is submitted, you can tick the checkboxes.

    (For guidance on how tests should be structured, please see this wiki page.)


    The following files have been tested partially, but do not have 100% coverage. Any of these files can be taken up and tested comprehensively. (Note that the link after each file points to its coverage report on Codecov.)


    Completed:

    • [x] core.controllers.tasks -- @ctao5660
    • [x] core.controllers.collection_viewer (coverage report) @jacoblipech
    • [x] core.controllers.custom_landing_pages @gurungrahul2
    • [x] core.controllers.concept_card_viewer (92%) @xuanluong #5741
    • [x] core.storage.skill.gae_models @sshou14
    • [x] core.controllers.recent_commits @sshou14 - #5551
    • [x] core.controllers.skill_editor @xuanluong - #5686
    • [x] core.controllers.topic_viewer @xuanluong - #5742
    • [x] core.controllers.topics_and_skills_dashboard (96%) -- @xuanluong
    • [x] core.domain.activity_domain @apb7 - #5194
    • [x] core.domain.calculation_registry @dawsoneliasen - #5391
    • [x] core.domain.learner_playlist_services @ezl-13
    • [x] core.domain.user_domain @unit-00 - #5380
    • [x] core.platform.app_identity.gae_app_identity_services @neoliteconsultant - #5439
    • [x] core.platform.memcache.gae_memcache_services @lilithxxx - #5355
    • [x] core.platform.models @varun-tandon - # 6263
    • [x] core.platform.taskqueue.gae_taskqueue_services @nalinbhardwaj
    • [x] core.platform.users.gae_current_user_services @hemant0308 - #5563
    • [x] core.storage.audit.gae_models @LanJosh - #5512
    • [x] core.storage.collection.gae_models @LanJosh - #5357
    • [x] core.storage.config.gae_models @dawsoneliasen
    • [x] core.storage.exploration.gae_models @sshou14 - #5552
    • [X] core.storage.job.gae_models @sshou14 - #5433
    • [X] core.storage.story.gae_models @JoyLubega - #5644
    • [X] core.storage.topic.gae_models @tonadev - #5727
    • [X] jinja_utils (87%) @hemant0308 -- #5582
    • [x] core.controllers.collection_editor @jacoblipech (10th March 2019)
    • [x] core.domain.learner_progress_domain - @dchen97 #5859
    • [x] core.domain.question_domain (93%) - @rafalk342 #5887
    • [x] core.domain.email_jobs_one_off (91%) @anubhavsinha98
    • [x] core.platform.email.mailgun_email_services (42%) @ulloaluis #6133
    • [x] core.storage.file.gae_models (100%) @ankita240796
    • [x] core.domain.collection_jobs_one_off (87%) @abhaygupta97 #6061
    • [X] core.domain.email_manager @siddhantkhandelwal #6306
    • [X] schema_utils (96%) @ulloaluis #6432
    • [X] core.controllers.learner_dashboard (coverage report) @varun-tandon (Upto 85%)
    • [x] core.controllers.question_editor (coverage report) @ujjwalgulecha (#6217)
    backend good first issue 
    opened by pranavsid98 282
  • Adding Mypy type annotations to domain folder files

    Adding Mypy type annotations to domain folder files

    This issue will track the type annotation process of all the core/domain/*.py (and their test files). To get started, ask to be assigned to any unclaimed task. Tasks are claimed by adding the username of the claimer to the end of the task, e.g. @example.

    Note: Main code file and its test file must be type-annotated together.

    The general procedure to add type annotations is as follows:

    1. Start with the main code file first.
    2. Remove the file to be annotated from the mypy denylist (i.e. from NOT_FULLY_COVERED_FILES in scripts/run_mypy_checks.py). Run the mypy checks on the code file using python -m scripts.run_mypy_checks --files <path/to/file> to understand all the errors mypy is reporting for this file.
    3. Go over them one by one, and fix them by following the detailed instructions as mentioned in our wiki.
    4. PAY ATTENTION to our guidelines for using type ignores in the codebase.
    5. For testing the changes after annotating all the files, run python -m scripts.run_mypy_checks, which runs the type checks on the entire codebase, and ensure that no errors are being reported.
    6. If errors occur in other files due to you change make sure to also fix those other files.

    Good examples of already annotated files in the codebase:

    1. Check out the core/storage folder.
    2. Ref PR for domain file type annotation: #14034

    If you face problems in understanding a particular case while adding annotations, please go over the tips mentioned in the wiki once, and let us know if you are still stuck!

    Tasks/files:

    • [x] core/domain/action_registry.py@sahiljoster32
    • [x] core/domain/activity_services.py@sahiljoster32
    • [x] core/domain/auth_services.py @IamhappyXD
    • [x] core/domain/blog_services.py @IamhappyXD
    • [x] core/domain/calculation_registry.py@sahiljoster32
    • [x] core/domain/classifier_services.py
    • [x] core/domain/classroom_services.py @SD-13
    • [x] core/domain/collection_services.py
    • [x] core/domain/config_services.py@sahiljoster32
    • [x] core/domain/cron_services.py @SD-13
    • [x] core/domain/customization_args_util.py
    • [x] core/domain/draft_upgrade_services.py
    • [x] core/domain/email_manager.py
    • [x] core/domain/email_services.py @jordyparker
    • [x] core/domain/email_subscription_services.py@sahiljoster32
    • [x] core/domain/event_services.py
    • [x] core/domain/exp_fetchers.py
    • [x] core/domain/exp_services.py
    • [x] core/domain/expression_parser.py
    • [x] core/domain/feedback_services.py
    • [x] core/domain/fs_services.py @sahiljoster32
    • [x] core/domain/html_cleaner.py @SD-13
    • [x] core/domain/html_validation_service.py
    • [x] core/domain/image_services.py @gopivaibhav
    • [x] core/domain/image_validation_services.py @hsadia538
    • [x] core/domain/improvements_services.py
    • [x] core/domain/interaction_registry.py
    • [x] core/domain/learner_goals_services.py
    • [x] core/domain/learner_playlist_services.py
    • [x] core/domain/learner_progress_services.py
    • [x] core/domain/moderator_services.py
    • [x] core/domain/object_registry.py
    • [x] core/domain/opportunity_services.py
    • [x] core/domain/platform_feature_services.py
    • [x] core/domain/platform_parameter_list.py @Darsuu
    • [x] core/domain/platform_parameter_list_test.py @Darsuu
    • [x] core/domain/platform_parameter_registry.py @Darsuu
    • [x] core/domain/playthrough_issue_registry.py @Darsuu
    • [x] core/domain/question_fetchers.py @winnie368c
    • [x] core/domain/question_services.py
    • [x] core/domain/rating_services.py @IamhappyXD
    • [x] core/domain/recommendations_services.py
    • [x] core/domain/rights_manager.py
    • [x] core/domain/role_services.py @gopivaibhav
    • [x] core/domain/rte_component_registry.py @hsadia538
    • [x] core/domain/rules_registry.py @hsadia538
    • [x] core/domain/search_services.py
    • [x] core/domain/skill_fetchers.py
    • [x] core/domain/skill_services.py
    • [x] core/domain/stats_services.py
    • [x] core/domain/story_fetchers.py
    • [x] core/domain/story_services.py
    • [x] core/domain/subscription_services.py
    • [x] core/domain/subtopic_page_services.py @ashish-patwal
    • [x] core/domain/suggestion_registry.py
    • [x] core/domain/suggestion_services.py
    • [x] core/domain/summary_services.py
    • [x] core/domain/takeout_service.py @jordyparker
    • [x] core/domain/taskqueue_services.py @jordyparker
    • [x] core/domain/topic_fetchers.py @SD-13
    • [x] core/domain/topic_services.py @SD-13
    • [x] core/domain/translatable_object_registry.py @ashish-patwal
    • [x] core/domain/translation_fetchers.py @sahiljoster32
    • [x] core/domain/translation_services.py @sahiljoster32
    • [x] core/domain/user_query_services.py @SD-13
    • [x] core/domain/user_services.py @SD-13
    • [x] core/domain/visualization_registry.py' @SD-13
    • [x] core/domain/voiceover_services.py @SD-13
    • [x] core/domain/wipeout_service.py @SD-13
    • [x] core/domain/change_domain.py @div-yam
    • [x] core/domain/collection_domain.py @sahiljoster32
    • [x] core/domain/exp_domain.py @Yavnikaa
    • [x] core/domain/fs_domain.py @PranshuSrivastava
    • [x] core/domain/param_domain.py @Asmit2952 (attempted in #14302)
    • [x] core/domain/platform_parameter_domain.py @Asmit2952 (attempted in #14302)
    • [x] core/domain/question_domain.py @Asmit2952 (attempted in #14302)
    • [x] core/domain/skill_domain.py @dhruvshrivastava
    • [x] core/domain/state_domain.py @dhruvshrivastava
    • [x] core/domain/stats_domain.py @winnie368c
    • [x] core/domain/story_domain.py @Sangkyun-Kim15
    • [x] core/domain/subtopic_page_domain.py @ashish-patwal
    • [x] core/domain/user_domain.py@sahiljoster32
    • [x] core/domain/user_query_domain.py @ashish-patwal
    enhancement 
    opened by sajalasati 242
  • Update docstrings in the python backend code.

    Update docstrings in the python backend code.

    The aim of this issue is to ensure that every backend file is properly documented. The docstrings serve as guidance to developers to help them understand what a class or a method is doing, so they must be written accurately.

    Some useful tips:

    • Please follow our style guide and also the Google Python style guide when writing the docstrings. Make sure to follow the patterns established there as closely as possible, including spacing, capitalization and punctuation.

    • Make sure that the docstrings for every function include Args, Returns, Raises etc. as and when applicable. If there are no args, then you can omit writing Args. Likewise for Returns, Raises etc. as well.

    • If a docstring is not present in the code, or the existing one is too vague for you to understand what's going on just by looking at it, then it should be rewritten to be more clear. You'll often need to read the code as well, and do a grep to find out specific method used in several files and in many other situations.

    • Every argument name under Args and under Returns or Raises should have a data type mentioned along with it. Make separate efforts to analyze their data types as this might be a bit tricky sometimes and there are many chances of getting mistaken. You can, for example, try to run the method/function while temporarily adding raise(type(X)) or logging.info(type(X)) to get the information you need.

    • Leave one line before each of Args, Returns and Raises. Indent any continuation lines by 4 spaces. See existing docstrings for examples.

    • If you feel that some files are absent from the list or some parts of the codebase are unclear or incorrectly factored, please feel free to bring this up!

    Running tests on a specific file

    • Go to the directory where the file is present (say-- if the file is in core directory, perform cd core to reach to the directory).
    • Execute pylint --disable=all --enable=missing-docstring <filename> to perform linter checks on the file. (Note: If you face any problem while running the above command, please comment out this line in .pylintrc locally and uncomment it when pushing your changes).
    • Add docstrings for the lines where you find 'Missing docstrings'.

    Here is the list of files that are required to be updated. Note: Once this issue is complete, we will turn on missing-docstring checks in Oppia's Python linter. Also, take care that some of the test methods/classes have to be excluded from the test files as they don't require docstrings in detail.

    Docstrings for test methods (test_* type) and test classes (*Tests type) don't need docstrings and hence, can be excluded while adding docstrings to the test files. Please add no-docstring-rgx=test_[a-z_]*|[a-zA-Z]*Tests|Test[a-zA-Z]* regex in .pylintrc file under [Basic] section.

    Needs to be done (based on code snapshot at 1 Dec 2018):

    • [x] core.jobs_test @vibhor98 C:497, 4: Missing method docstring (missing-docstring) C:791, 8: Missing function docstring (missing-docstring)
    • [x] core.jobs @YashJipkate C:103, 4: Missing method docstring (missing-docstring) C:122, 8: Missing function docstring (missing-docstring) C:486, 4: Missing method docstring (missing-docstring) C:490, 4: Missing method docstring (missing-docstring) C:494, 4: Missing method docstring (missing-docstring) C:498, 4: Missing method docstring (missing-docstring) C:502, 4: Missing method docstring (missing-docstring) C:506, 4: Missing method docstring (missing-docstring) C:510, 4: Missing method docstring (missing-docstring) C:514, 4: Missing method docstring (missing-docstring) C:1239, 8: Missing function docstring (missing-docstring) C:1291, 8: Missing function docstring (missing-docstring) C:1471, 8: Missing function docstring (missing-docstring)
    • [x] core.controllers.skill_editor_test @vibhor98 C: 52, 4: Missing method docstring (missing-docstring) C: 60, 4: Missing method docstring (missing-docstring) C: 66, 4: Missing method docstring (missing-docstring) C: 71, 4: Missing method docstring (missing-docstring) C: 74, 4: Missing method docstring (missing-docstring)
    • [x] core.controllers.creator_dashboard_test @vibhor98 C:124, 4: Missing method docstring (missing-docstring)
    • [x] core.controllers.editor_test @vibhor98 C:183, 8: Missing function docstring (missing-docstring) C:195, 8: Missing function docstring (missing-docstring) C:1776, 4: Missing method docstring (missing-docstring) C:1784, 4: Missing method docstring (missing-docstring)
    • [x] core.controllers.reader_test @vibhor98 C:492, 4: Missing method docstring (missing-docstring) C:495, 4: Missing method docstring (missing-docstring) C:525, 4: Missing method docstring (missing-docstring) C:528, 4: Missing method docstring (missing-docstring) C:532, 4: Missing method docstring (missing-docstring)
    • [x] core.controllers.resources_test @vibhor98 C: 31, 4: Missing method docstring (missing-docstring)
    • [x] core.controllers.topics_and_skills_dashboard_test @vibhor98 C: 50, 4: Missing method docstring (missing-docstring)
    • [x] core.controllers.creator_dashboard @vibhor98 C:168, 8: Missing function docstring (missing-docstring) C:174, 8: Missing function docstring (missing-docstring)
    • [x] core.controllers.base_test @vibhor98 C:352, 0: Missing class docstring (missing-docstring) C:354, 4: Missing method docstring (missing-docstring) C:360, 4: Missing method docstring (missing-docstring) C:529, 4: Missing class docstring (missing-docstring)
    • [x] core.controllers.admin @vibhor98 C:198, 4: Missing method docstring (missing-docstring) C:209, 4: Missing method docstring (missing-docstring)
    • [x] core.controllers.feedback_test @vibhor98 C:396, 4: Missing method docstring (missing-docstring) C:405, 4: Missing method docstring (missing-docstring)
    • [x] core.platform.users.gae_current_user_services @vibhor98 C: 70, 4: Missing class docstring (missing-docstring)
    • [x] core.platform.search.gae_search_services @vibhor98 C:100, 0: Missing function docstring (missing-docstring) C:120, 0: Missing function docstring (missing-docstring) C:307, 0: Missing function docstring (missing-docstring) C:340, 0: Missing function docstring (missing-docstring)
    • [x] core.storage.base_model.gae_models_test @YashJipkate C:124, 0: Missing class docstring (missing-docstring) C:128, 0: Missing class docstring (missing-docstring) C:138, 0: Missing class docstring (missing-docstring)
    • [x] core.storage.base_model.gae_models @YashJipkate C:423, 4: Missing method docstring (missing-docstring) C:431, 4: Missing method docstring (missing-docstring)
    • [x] core.storage.user.gae_models @YashJipkate C:178, 4: Missing method docstring (missing-docstring) C:408, 4: Missing method docstring (missing-docstring) C:488, 4: Missing method docstring (missing-docstring)
    • [x] core.tests.test_utils @YashJipkate C:558, 4: Missing method docstring (missing-docstring)
    • [x] core.tests.performance_tests.base @YashJipkate C: 47, 4: Missing method docstring (missing-docstring) C: 52, 4: Missing method docstring (missing-docstring) C: 55, 4: Missing method docstring (missing-docstring) C: 58, 4: Missing method docstring (missing-docstring) C: 63, 4: Missing method docstring (missing-docstring) C: 68, 4: Missing method docstring (missing-docstring) C: 80, 4: Missing method docstring (missing-docstring) C: 92, 4: Missing method docstring (missing-docstring) C:114, 4: Missing method docstring (missing-docstring) C:121, 4: Missing method docstring (missing-docstring) C:128, 4: Missing method docstring (missing-docstring) C:135, 4: Missing method docstring (missing-docstring)
    • [x] core.tests.performance_framework.perf_services @YashJipkate C:208, 4: Missing method docstring (missing-docstring) C:213, 4: Missing method docstring (missing-docstring) C:273, 4: Missing method docstring (missing-docstring) C:278, 4: Missing method docstring (missing-docstring) C:281, 4: Missing method docstring (missing-docstring) C:296, 4: Missing method docstring (missing-docstring) C:308, 4: Missing method docstring (missing-docstring) C:319, 4: Missing method docstring (missing-docstring) C:328, 4: Missing method docstring (missing-docstring) C:336, 4: Missing method docstring (missing-docstring) C:345, 4: Missing method docstring (missing-docstring) C:357, 4: Missing method docstring (missing-docstring) C:360, 4: Missing method docstring (missing-docstring) C:364, 4: Missing method docstring (missing-docstring) C:368, 4: Missing method docstring (missing-docstring) C:372, 4: Missing method docstring (missing-docstring)
    • [x] core.tests.performance_framework.perf_domain @YashJipkate C:175, 4: Missing method docstring (missing-docstring) C:274, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.summary_services @YashJipkate C:495, 4: Missing function docstring (missing-docstring)
    • [x] core.domain.email_jobs_one_off_test @YashJipkate C: 46, 8: Missing function docstring (missing-docstring)
    • [x] core.domain.visualization_registry @YashJipkate C: 34, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.feedback_jobs_continuous @vddesai1871 C: 91, 8: Missing function docstring (missing-docstring) C:105, 8: Missing function docstring (missing-docstring) C:119, 8: Missing function docstring (missing-docstring)
    • [x] core.domain.rte_component_registry_test @vibhor98 C: 59, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.exp_services_test @dev-ritik C: 50, 0: Missing function docstring (missing-docstring) C:197, 4: Missing method docstring (missing-docstring) C:2463, 8: Missing function docstring (missing-docstring) C:2689, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.interaction_registry @vibhor98 C: 41, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.user_jobs_continuous_test @vibhor98 C: 92, 4: Missing method docstring (missing-docstring) C:106, 4: Missing method docstring (missing-docstring) C:111, 4: Missing method docstring (missing-docstring) C:118, 4: Missing method docstring (missing-docstring) C:662, 4: Missing method docstring (missing-docstring) C:687, 4: Missing method docstring (missing-docstring) C:695, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.calculation_registry @vibhor98 C: 31, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.classifier_services_test @vibhor98 C: 47, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.exp_domain_test @vibhor98 C:4258, 8: Missing function docstring (missing-docstring)
    • [x] core.domain.activity_services_test @vibhor98 C: 36, 4: Missing method docstring (missing-docstring) C: 40, 4: Missing method docstring (missing-docstring) C: 44, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.feedback_services_test @vibhor98 C:133, 4: Missing method docstring (missing-docstring) C:142, 4: Missing method docstring (missing-docstring) C:236, 8: Missing function docstring (missing-docstring)
    • [x] core.domain.stats_domain_test @vibhor98 C: 29, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.story_services @vibhor98 C:655, 4: Missing function docstring (missing-docstring)
    • [x] core.domain.collection_services_test @vibhor98 C: 41, 0: Missing function docstring (missing-docstring) C:134, 4: Missing method docstring (missing-docstring) C:137, 4: Missing method docstring (missing-docstring) C:336, 4: Missing method docstring (missing-docstring) C:1344, 8: Missing function docstring (missing-docstring) C:1510, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.user_jobs_one_off_test @vibhor98 C:739, 4: Missing method docstring (missing-docstring) C:742, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.subscription_services_test @vibhor98 C: 63, 4: Missing method docstring (missing-docstring) C: 70, 4: Missing method docstring (missing-docstring) C: 77, 4: Missing method docstring (missing-docstring) C:363, 4: Missing method docstring (missing-docstring) C:370, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.obj_services @vibhor98 C: 33, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.stats_jobs_continuous_test @vibhor98 C: 68, 4: Missing method docstring (missing-docstring) C: 73, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.user_jobs_continuous @vibhor98 C:389, 8: Missing function docstring (missing-docstring) C:415, 8: Missing function docstring (missing-docstring)
    • [x] core.domain.feedback_jobs_continuous_test @vibhor98 C: 60, 4: Missing method docstring (missing-docstring) C: 65, 4: Missing method docstring (missing-docstring) C: 73, 4: Missing method docstring (missing-docstring) C:438, 4: Missing method docstring (missing-docstring) C:443, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.email_manager_test @vibhor98 C:537, 8: Missing function docstring (missing-docstring) C:584, 8: Missing function docstring (missing-docstring) C:629, 8: Missing function docstring (missing-docstring) C:845, 8: Missing function docstring (missing-docstring) C:865, 8: Missing function docstring (missing-docstring) C:916, 8: Missing function docstring (missing-docstring)
    • [x] core.domain.story_services_test @vibhor98 C:426, 4: Missing method docstring (missing-docstring) C:430, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.stats_services_test @vibhor98 C:1571, 4: Missing method docstring (missing-docstring) C:1576, 4: Missing method docstring (missing-docstring) C:1583, 4: Missing method docstring (missing-docstring) C:1591, 4: Missing method docstring (missing-docstring) C:1601, 4: Missing method docstring (missing-docstring) C:1605, 4: Missing method docstring (missing-docstring) C:1615, 4: Missing method docstring (missing-docstring) C:1626, 4: Missing method docstring (missing-docstring) C:1895, 4: Missing method docstring (missing-docstring) C:1899, 4: Missing method docstring (missing-docstring) C:1904, 4: Missing method docstring (missing-docstring) C:1911, 4: Missing method docstring (missing-docstring) C:1920, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.user_services_test @vibhor98 C:946, 8: Missing class docstring (missing-docstring) C:954,12: Missing method docstring (missing-docstring) C:961,12: Missing method docstring (missing-docstring)
    • [x] core.domain.rating_services @vibhor98 C: 59, 4: Missing function docstring (missing-docstring)
    • [x] core.domain.email_manager @vibhor98 C:267, 4: Missing function docstring (missing-docstring) C:314, 4: Missing function docstring (missing-docstring)
    • [x] core.domain.classifier_domain_test @vibhor98 C: 29, 4: Missing method docstring (missing-docstring) C:165, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.learner_playlist_services_test @vibhor98 C: 81, 4: Missing method docstring (missing-docstring) C: 89, 4: Missing method docstring (missing-docstring)
    • [x] core.domain.learner_progress_services_test @vibhor98 C: 90, 4: Missing method docstring (missing-docstring) C: 99, 4: Missing method docstring (missing-docstring) C:108, 4: Missing method docstring (missing-docstring) C:116, 4: Missing method docstring (missing-docstring) C:129, 4: Missing method docstring (missing-docstring) C:145, 4: Missing method docstring (missing-docstring)

    Extensions

    • [x] extensions.objects.models.objects @vibhor98 C:513, 8: Missing function docstring (missing-docstring) C:520, 8: Missing function docstring (missing-docstring)
    • [x] extensions.objects.models.objects_test @vibhor98 C:441, 4: Missing method docstring (missing-docstring)
    • [x] extensions.interactions.base @vibhor98 C:188, 4: Missing method docstring (missing-docstring)
    • [x] extensions.interactions.base_test @vibhor98 C: 84, 4: Missing method docstring (missing-docstring) C:107, 4: Missing method docstring (missing-docstring) C:112, 4: Missing method docstring (missing-docstring) C:137, 4: Missing method docstring (missing-docstring) C:183, 8: Missing function docstring (missing-docstring)
    • [x] extensions.answer_summarizers.models_test @vibhor98 C: 40, 4: Missing method docstring (missing-docstring)

    Scripts

    • [x] scripts.pre_push_hook @vibhor98 C:216, 0: Missing function docstring (missing-docstring) C:225, 0: Missing function docstring (missing-docstring) C:232, 0: Missing function docstring (missing-docstring) C:247, 0: Missing function docstring (missing-docstring)

    • [x] scripts.pre_commit_linter @vibhor98 W:1668, 4: Unreachable code (unreachable)

    • [x] scripts.install_third_party @vibhor98 C:336, 0: Missing function docstring (missing-docstring)

    • [x] scripts.docstrings_checker_test @vibhor98 C: 23, 0: Missing class docstring (missing-docstring)

    • [x] scripts.deploy @vibhor98 C:200, 0: Missing function docstring (missing-docstring)

    • [x] scripts.update_feconf @vibhor98 C: 69, 0: Missing function docstring (missing-docstring)

    • [ ] Enable the check for mandatory args and returns once all docstrings are completed @apb7

    Completed:

    • [x] oppia.feconf @rahulnitdgp
    • [x] oppia.scripts.build (@hoangviet1993 #5580)
    • [X] oppia.core.domain.acl_decorators: Check and correct the return types @apb7
    • [x] core.controllers.base @apb7 Add docstrings for methods at line no.- 134, 537
    • [x] core.controllers.cron @WickedBrat Add docstrings for class at line no.- 109
    • [x] core.controllers.collection_editor @vibhor98 Add docstrings for classes at line no.- 165, 201
    • [x] core.controllers.learner_dashboard @hundredrab Add docstrings for class at line no.- 121 Add docstrings for methods at line no.- 33, 124
    • [x] core.controllers.pages @Vishnu-M Add docstrings for method at line no.- 28
    • [x] core.domain.acl_decorators @vibhor98
    • [x] core.domain.classifier_domain @apb7 Add docstrings for methods at line no.- 45, 173
    • [x] core.domain.collection_domain @vibhor98 Add docstrings for methods at line no.- Add docstrings for class at line no.- 32
    • [x] core.domain.config_domain @vibhor98
    • [x] core.domain.email_manager @vibhor98 Add docstrings for methods at line no.- 37, 928, 939
    • [x] core.domain.email_subscription_services @Kunalgarg2100
    • [X] core.domain.feedback_jobs_continuous @netajik #5680 Add docstrings for method at line no.- 21
    • [x] oppia.core.controllers.translator @netajik
    • [x] core.domain.feedback_jobs_continuous @apb7
    • [x] core.domain.fs_domain @vibhor98
    • [x] core.domain.param_domain @jervis446 Add docstrings for method at line no.- 146
    • [x] core.domain.stats_domain @vibhor98
    • [x] core.domain.stats_jobs_continuous @vibhor98
    • [x] core.domain.stats_jobs_one_off @abhimanyuthakre
    • [x] core.domain.user_jobs_continuous @GanitGenius
    • [x] core.domain.user_jobs_one_off @GanitGenius
    • [x] core.domain.user_query_services @proishan11
    • [x] core.domain.user_services @proishan11
    • [x] core.domain.value_generators_domain @vasutomar
    • [x] core.jobs @GanitGenius Add docstrings for classes at line no.- 518, 581, 613, 643, 846, 934
    • [x] core.tests.test_util_jobs @vibhor98
    • [x] core.platform.models @joydeep1701
    • [x] core.platform.email.gae_email_services @square-1111
    • [x] core.storage.collection.gae_models @vibhor98
    • [x] core.storage.email.gae_models @vibhor98
    • [x] core.storage.exploration.gae_models @vibhor98
    • [x] core.storage.feedback.gae_models @vibhor98
    • [x] core.storage.file.gae_models @vibhor98
    • [X] core.storage.job.gae_models @divyadeep1
    • [x] core.tests.test_utils @apb7
    • [x] oppia.export.cloud_datastore_admin @mahjong
    • [x] oppia.extensions.interactions.base @vibhor98
    • [x] oppia.extensions.actions.base @vibhor98
    • [x] oppia.extensions.answer_summarizers.models @vibhor98
    • [x] oppia.extensions.issues.base @vibhor98
    • [x] oppia.core.domain.skill_domain @vibhor98
    • [x] oppia.extensions.objects.models.objects @vibhor98
    • [x] oppia.extensions.visualizations.models @vibhor98
    • [x] oppia.scripts.pylint_extensions @tonadev
    • [x] oppia.scripts.cut_release_branch @tonadev
    • [x] oppia.scripts.docstrings_checker @lilithxxx
    • [x] oppia.scripts.prepare_automatic_backups @import-keshav
    • [x] oppia.scripts.pre_commit_linter @import-keshav
    • [x] oppia.scripts.pre_push_hook @import-keshav
    • [x] oppia.main @abeerunscore96
    • [x] oppia.core.domain.acl_decorators @dchen97
    • [x] oppia.core.domain.stats_jobs_one_off @vibhor98 - #5734
    • [x] Add module docstrings to- TextInput, Continue, PencilCodeEditor, MusicNotesInput, NumericInput, CodeRepl, MultipleChoiceInput, InteractiveMap, GraphInput, LogicProof, FractionInput, SetInput, ImageClickInput, ItemSelectionInput, MathExpressionInput, EndExploration. @vibhor98 #5734
    • [x] oppia.scripts.build @import-keshav -- #5808
    • [x] oppia.core.domain.acl_decorators @dchen97 #5803
    • [x] oppia.extensions.objects.models.objects @rafalk342
    • [x] oppia.schema_utils @vibhor98 #5849
    • [x] oppia.core.domain.fs_services @vibhor98 #5849
    • [x] oppia.core.storage.question.gae_models @vibhor98 #5849
    • [x] oppia.scripts.docstrings_checker @import-keshav
    • [x] oppia.scripts.common @import-keshav
    • [x] oppia.jinja_utils @vibhor98
    backend good first issue 
    opened by vibhor98 226
  • Migrate directives/controllers to Angular components

    Migrate directives/controllers to Angular components

    This issue aims to migrate directives/controllers written in AngularJS to modern Angular components.

    We would request you to pick up any directive of your choice from core/templates/pages or core/templates/components. After you've picked up a directive, please mention the directive name that you want to take up. We will assign that particular directive to you and keep a track so that there is no duplication of work that goes along. After you're assigned, please go ahead and read this wiki page:https://github.com/oppia/oppia/wiki/Angular-Migration#implementation-details-to-migrate-directives, it has all the steps mentioned clearly that will help you to migrate the directives/controllers.

    Also, make sure all the services that your directive is using are migrated to Angular.

    Please feel free to reach out to @nithusha21 and @darksun27 in case you have any issues.

    Some useful videos

    How to find usages of your PR: https://vimeo.com/442416282 How to check your PR : https://vimeo.com/440915367 (This is an example on how to check topic landing page)

    Unclaimed directives:

    • [ ] answer-submit-action.component.ts [difficult without separate work--talk to @srijanreddy98]
    • [ ] questions-list-select-skill-modal.controller @brianyou0
    • [ ] exploration-player-suggestion-modal.controller
    • [ ] exploration-player-page.component.ts
    • [ ] confirm-discard-changes-modal.template
    • [ ] confirm-leave-modal.template @ishar19
    • [ ] editor-reloading-modal.controller
    • [ ] exploration-metadata-modal.controller
    • [ ] exploration-publish-modal.template
    • [ ] exploration-save-modal.controller @JeeveshGarg
    • [ ] help-modal.controller @patrycjapraczyk
    • [x] lost-changes-modal.controller
    • [x] post-publish-modal.controller @heyimShivam
    • [x] save-validation-fail-modal.controller
    • [x] save-version-mismatch-modal.controller
    • [ ] state-diff-modal.controller @soumyo123-prog
    • [ ] welcome-modal.controller @ZhanLiangUF

    Claimed directives:

    • [ ] admin-config-tab.directive.ts @benberk
    • [ ] information-card-modal.controller @benberk
    • [ ] side-navigation-bar.directive.ts - @cemcshane
    • [ ] review-test-page.directive.ts - @darksun27
    • [ ] collection-navbar.directive.ts - @hngerebara
    • [ ] exploration-title-editor.component.ts - @suryasiriki4
    • [ ] question-difficulty-selector.directive.ts - @Bhanu-mbvg
    • [ ] delete-account-page.component.ts @ritvikkhanijo
    • [ ] topic-selector.directive.ts @sayantan1413
    • [ ] classroom-page.component.ts @tanishq67
    • [ ] response-header.directive.ts @karma200020
    • [ ] skill-selector.directive.ts @jcqli
    • [ ] upload-activity-modal.controller.ts @mridul-netizen
    • [ ] continue-button.directive.ts @div-yam
    • [ ] select-skill-modal.controller.ts @krishita30j

    Note: For a guide on how to access Oppia's webpages, see this.

    frontend enhancement 
    opened by bansalnitish 209
  • Add

    Add "async" keyword to asynchronous functions that return a promise

    Description

    In order to make it easier for developers to identify asynchronous methods, the following conventions need to be introduced:

    1. Use of "async" keyword in the function definitions.
    2. Use of "Async" added to the end of the function name.

    E.g.

    Before changes:

    fetchClassroomData(classroomUrlFragment: string): Promise<ClassroomData> {
      return new Promise((resolve, reject) => {
        // some asynchronous operation.
      });
    }
    

    After changes:

    async fetchClassroomDataAsync(classroomUrlFragment: string): Promise<ClassroomData> {
      return new Promise((resolve, reject) => {
        // some asynchronous operation.
      });
    }
    

    Note that (1) "async" keyword was added before function name and (2) fetchClassroomData has changed to fetchClassroomDataAsync ("Async" is added to the name).

    For anonymous function definitions, the "async" keyword needs to be added before the "function" keyword. Example:

    Before:

    const getThreads = function() {
      return new Promise((resolve, reject) => {
        // some asynchronous operation.
      });
    }
    

    After:

    const getThreadsAsync = async function() {
      return new Promise((resolve, reject) => {
        // some asynchronous operation.
      });
    }
    

    Tips

    How to find out which functions need this change?

    1. Search for methods that are then-able. You can do a simple search for .then( to reveal asynchronous then-able methods.
    2. Go to the function definition of a function found in step 1 and check if the return type for the function from step 1 is a Promise object. For example, in the fetchClassroomDataAsync function mentioned above, the return type is Promise<ClassroomData, which means that the function returns a Promise object that resolves with a value of type ClassroomData. As long as the return type is of the form Promise<..>, the function can be changed to follow the convention mentioned in the description.
    3. If the function does not have the return type defined, the function definition needs to be updated with the appropriate return type before it can follow the convention mentioned in the description. For information on how to define types, please see "Guide on Defining Types".

    Here are some examples from the code base

    https://github.com/oppia/oppia/blob/e4cd1e8c58232f04e642a6c61133e6716d59bf45/core/templates/services/state-top-answers-stats-backend-api.service.ts#L40-L49

    https://github.com/oppia/oppia/blob/e4cd1e8c58232f04e642a6c61133e6716d59bf45/core/templates/services/state-top-answers-stats.service.ts#L68-L87

    https://github.com/oppia/oppia/blob/e4cd1e8c58232f04e642a6c61133e6716d59bf45/core/templates/services/state-top-answers-stats.service.ts#L112-L117

    https://github.com/oppia/oppia/blob/e4cd1e8c58232f04e642a6c61133e6716d59bf45/core/templates/services/exploration-improvements.service.ts#L143-L146

    https://github.com/oppia/oppia/blob/e4cd1e8c58232f04e642a6c61133e6716d59bf45/core/templates/domain/classroom/classroom-backend-api.service.ts#L99-L111

    Steps to follow

    1. On your local setup, add the eslint check @typescript-eslint/promise-function-async (see this).
    2. Run the lint check on the CI on your fork of Oppia or on your local machine. The linter will report all the files that require this change.
    3. Follow the instructions mentioned in the How to find out which functions need this change? section to introduce the new keyword and pattern.

    Important Notes

    1. All the files listed by the eslint check needs to be handled and the PR that fully fixes this issue must also introduce the lint check.
    2. This task can be assigned and worked on only after the following PRs have been merged https://github.com/oppia/oppia/pull/12302, https://github.com/oppia/oppia/pull/12291, https://github.com/oppia/oppia/pull/12194, https://github.com/oppia/oppia/pull/12188, https://github.com/oppia/oppia/pull/12164, https://github.com/oppia/oppia/pull/12151, https://github.com/oppia/oppia/pull/12020.
    3. The assignee for this task must ensure that the async / ..Async pattern is introduced across the codebase in their PR.

    Note: For a guide on how to access Oppia's webpages, see this.

    opened by kevintab95 200
  • Fix #13347 #13562 #14285: Introduce new attribute proto_size_in_bytes for Exploration models

    Fix #13347 #13562 #14285: Introduce new attribute proto_size_in_bytes for Exploration models

    Overview

    1. This PR fixes
    • fixes #13347
    • fixes #13562
    • fixes #14285
    1. This PR does the following: adding proto_size_in_bytes attributes for exploration model
      1. This PR introduced a new attribute proto_size_in_bytes in the exploration model. This attribute will contain the proto size of the exploration.
      2. The size calculation is done using the proto files provided by the [oppia-proto-api](https://github.com/oppia/oppia-proto-api/tree/introduce-proto-api-v1) repository.
      3. This PR introduced functions to_proto for the classes which are required to fill the proto fields and other respective functions:
        • class Exploration
        • class State
        • class AnswerGroup
        • class Hint
        • class Solution
        • class InteractionInstance
        • class Outcome
        • class Voiceover
        • class WrittenTranslation
        • class WrittenTranslations
        • class RecordedVoiceovers
        • class SubtitledHtml
        • class SubtitledUnicode
        • class TranslatableItem
      4. I had tried to write test cases for all the public functions introduced in this PR.
      5. core/tests/data/oppia-ThetitleforZIPdownloadhandlertest!-v2-gold.zip - This zip file is updated by adding this new attribute proto_size_in_bytes. This can be reviewed by locally unzipping and checking if the attribute is correct or not.
      6. The way we are bringing the proto files to the codebase is mentioned in the file scripts/install_third_party_libs.py.

    TODO

    1. All checks should pass
    2. Write leftover test cases for beam job

    Essential Checklist

    • [x] The PR title starts with "Fix #bugnum: ", followed by a short, clear summary of the changes. (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".)
    • [x] The linter/Karma presubmit checks have passed locally on your machine.
    • [x] "Allow edits from maintainers" is checked. (See here for instructions on how to enable it.)
      • This lets reviewers restart your CircleCI tests for you.
    • [x] The PR is made from a branch that's not called "develop".

    Proof that changes are correct

    Screenshot 2021-07-13 at 17 08 55 Screenshot 2021-12-17 at 17 23 17

    PR Pointers

    • Make sure to follow the instructions for making a code change.
    • Oppiabot will notify you when you don't add a PR_CHANGELOG label. If you are unable to do so, please @-mention a code owner (who will be in the Reviewers list), or ask on Gitter.
    • For what code owners will expect, see the Code Owner's wiki page.
    • Make sure your PR follows conventions in the style guide, otherwise this will lead to review delays.
    • Never force push. If you do, your PR will be closed.
    • Oppiabot can assign anyone for review/help if you leave a comment like the following: "{{Question/comment}} @{{reviewer_username}} PTAL"
    • Some of the e2e tests are flaky, and can fail for reasons unrelated to your PR. We are working on fixing this, but in the meantime, if you need to restart the tests, please check the "If your build fails" wiki page.
    stale PR: don't merge - HAS MERGE CONFLICTS PR: Affects datastore layer PR: don't merge - STALE BUILD PR CHANGELOG: Miscellaneous -- @vojtechjelinek 
    opened by anandwana001 164
  • New About page

    New About page

    Desktop view:

    https://user-images.githubusercontent.com/62715691/108551960-aafb4200-7316-11eb-8d52-da19a3d16c5e.mp4

    Tablet view:

    https://user-images.githubusercontent.com/62715691/108048265-d1965000-706c-11eb-9cb1-3d008bc38bc1.mp4

    Mobile view(portrait):

    https://user-images.githubusercontent.com/62715691/108552037-c8c8a700-7316-11eb-9037-3a5ffdd00ef4.mp4

    Mobile view(landscape):

    https://user-images.githubusercontent.com/62715691/108048866-90527000-706d-11eb-9289-060756a0309a.mp4

    Overview

    1. This PR fixes nothing.
    2. This PR does the following: modifies the about-page.

    Essential Checklist

    • [ ] The PR title starts with "Fix #bugnum: ", followed by a short, clear summary of the changes. (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".)
    • [x] The linter/Karma presubmit checks have passed locally on your machine.
    • [x] "Allow edits from maintainers" is checked. (See here for instructions on how to enable it.)
      • This lets reviewers restart your CircleCI tests for you.
    • [x] The PR is made from a branch that's not called "develop".

    PR Pointers

    • Make sure to follow the instructions for making a code change.
    • Oppiabot will notify you when you don't add a PR_CHANGELOG label. If you are unable to do so, please @-mention a code owner (who will be in the Reviewers list), or ask on Gitter.
    • For what code owners will expect, see the Code Owner's wiki page.
    • Make sure your PR follows conventions in the style guide, otherwise this will lead to review delays.
    • Never force push. If you do, your PR will be closed.
    PR CHANGELOG: Learner/Creator Pages -- @aks681 
    opened by ReshuKumari 136
  • Changes Material Icons with Font Awesome icons in these files

    Changes Material Icons with Font Awesome icons in these files

    Overview

    1. This PR fixes or fixes part of #[15968].
    2. This PR does the following: [Replace Material Icons with Font Awesome icons]

    Essential Checklist

    • [x] The PR title starts with "Fix #15968: ", followed by a short, clear summary of the changes. ( oppia/core/templates/components/question-directives/questions-list/questions-list.component.html, oppia/core/templates/pages/learner-group-pages/create-group/add-syllabus-items.component.html, oppia/core/templates/pages/skill-editor-page/editor-tab/skill-prerequisite-skills-editor/skill-prerequisite-skills-editor.component.html".)
    • [x] The linter/Karma presubmit checks have passed locally on your machine.
    • [x] "Allow edits from maintainers" is checked. (See here for instructions on how to enable it.)
      • This lets reviewers restart your CircleCI tests for you.
    • [x] The PR is made from a branch that's not called "develop".

    Proof that changes are correct

    1. oppia/core/templates/components/question-directives/questions-list/questions-list.component.html Before changes

    Screenshot from 2022-12-17 19-31-36

    After changes

    Screenshot from 2022-12-17 19-36-12

    2.oppia/core/templates/pages/learner-group-pages/create-group/add-syllabus-items.component.html

    Before changes Screenshot from 2022-12-28 00-19-51 Screenshot from 2022-12-28 00-20-13 Screenshot from 2022-12-28 00-20-26 Screenshot from 2022-12-28 00-37-09

    After changes

    Screenshot from 2022-12-28 00-41-50 Screenshot from 2022-12-28 00-42-01 Screenshot from 2022-12-28 00-42-56 Screenshot from 2022-12-28 00-44-14

    1. oppia/core/templates/pages/skill-editor-page/editor-tab/skill-prerequisite-skills-editor/skill-prerequisite-skills-editor.component.html

    Before changes Screenshot from 2022-12-27 23-28-56

    After changes Screenshot from 2022-12-27 23-37-18

    Proof of changes on desktop with slow/throttled network

    Proof of changes on mobile phone

    Proof of changes in Arabic language

    PR Pointers

    • Make sure to follow the instructions for making a code change.
    • If you need a review or an answer to a question, and don't have permissions to assign people, leave a comment like the following: "{{Question/comment}} @{{reviewer_username}} PTAL". Oppiabot will help assign that person for you.
    • For what code owners will expect, see the Code Owner's wiki page.
    • Make sure your PR follows conventions in the style guide, otherwise this will lead to review delays.
    • Never force push. If you do, your PR will be closed.
    • Some of the e2e tests are flaky, and can fail for reasons unrelated to your PR. We are working on fixing this, but in the meantime, if you need to restart the tests, please check the "If your build fails" wiki page.
    REVIEWERS: Please add changelog label 
    opened by 852hamza 2
  • [BUG]: Disable blog post Publish button in the /blog-post-editor page, when any draft/published blog post with same title already exists.

    [BUG]: Disable blog post Publish button in the /blog-post-editor page, when any draft/published blog post with same title already exists.

    Describe the bug

    Currently, if we try to save a blog post draft or publish a blog post with a title such that it already exists in the drafts or the published section, then we get an error alert that we cannot save/publish a blog post with the title already exists. but if the blog post with the same title already exists the Publish or save draft button must be disabled with an error message in red color below that button that the title needs to be changed!

    Steps To Reproduce

    1. go to blog-dashboard and create a new blog post
    2. add the blog post title such that a blog post with the same title already exists.
    3. try to save/publish it, you will see an error alert

    Expected Behavior

    the Save/Publish button must be disabled with an error message below it.

    Screenshots/Videos

    No response

    What device are you using?

    No response

    Operating System

    No response

    What browsers are you seeing the problem on?

    No response

    Browser version

    No response

    Additional context

    No response

    triage needed bug 
    opened by Shivkant-Chauhan 0
  • Fix #16351: Fixed the overflow in audio header

    Fix #16351: Fixed the overflow in audio header

    Overview

    1. This PR fixes #16351.
    2. This PR does the following: Changed the height to auto and padding to 20px 4px of elements with audio-controls class.

    I hope to get the review soon, thanks!

    Essential Checklist

    • [x] The PR title starts with "Fix #bugnum: ", followed by a short, clear summary of the changes. (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".)
    • [x] The linter/Karma presubmit checks have passed locally on your machine.
    • [x] "Allow edits from maintainers" is checked. (See here for instructions on how to enable it.)
      • This lets reviewers restart your CircleCI tests for you.
    • [x] The PR is made from a branch that's not called "develop".

    Proof that changes are correct

    Proof of changes on desktop

    image

    Proof of changes on mobile phone

    image

    Proof of changes in Arabic language

    image

    PR Pointers

    • Make sure to follow the instructions for making a code change.
    • If you need a review or an answer to a question, and don't have permissions to assign people, leave a comment like the following: "{{Question/comment}} @{{reviewer_username}} PTAL". Oppiabot will help assign that person for you.
    • For what code owners will expect, see the Code Owner's wiki page.
    • Make sure your PR follows conventions in the style guide, otherwise this will lead to review delays.
    • Never force push. If you do, your PR will be closed.
    • Some of the e2e tests are flaky, and can fail for reasons unrelated to your PR. We are working on fixing this, but in the meantime, if you need to restart the tests, please check the "If your build fails" wiki page.
    REVIEWERS: Please add changelog label 
    opened by Vitika9 2
  • Fix #10180 Added supplemental card to display all non inline interaction

    Fix #10180 Added supplemental card to display all non inline interaction

    Overview

    1. This PR fixes or fixes part of #10180.
    2. This PR does the following: The skill preview card had no option to display non-inline interaction like drag and drop hence i have added supplemental card component to display the interactions.

    Essential Checklist

    • [x] The PR title starts with "Fix #bugnum: ", followed by a short, clear summary of the changes. (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".)
    • [x] The linter/Karma presubmit checks have passed locally on your machine.
    • [x] "Allow edits from maintainers" is checked. (See here for instructions on how to enable it.)
      • This lets reviewers restart your CircleCI tests for you.
    • [x] The PR is made from a branch that's not called "develop".

    Proof that changes are correct

    https://user-images.githubusercontent.com/96513964/209850288-f91a6f46-358c-4a5d-9754-0b5c1734dff9.mp4

    Proof of changes on desktop with slow/throttled network

    Proof of changes on mobile phone

    Proof of changes in Arabic language

    PR Pointers

    • Make sure to follow the instructions for making a code change.
    • If you need a review or an answer to a question, and don't have permissions to assign people, leave a comment like the following: "{{Question/comment}} @{{reviewer_username}} PTAL". Oppiabot will help assign that person for you.
    • For what code owners will expect, see the Code Owner's wiki page.
    • Make sure your PR follows conventions in the style guide, otherwise this will lead to review delays.
    • Never force push. If you do, your PR will be closed.
    • Some of the e2e tests are flaky, and can fail for reasons unrelated to your PR. We are working on fixing this, but in the meantime, if you need to restart the tests, please check the "If your build fails" wiki page.
    PR CHANGELOG: Bug fixes -- @nithusha21 
    opened by Priyansh61 1
  • In voiceover mode, translated text still appears in English.

    In voiceover mode, translated text still appears in English.

    Some translated interaction is still showing in English, especially for the button text 'Continue' but on clicking translation mode, translated content is seen. Please see attached video.

    https://user-images.githubusercontent.com/102471032/209743021-a4a07298-ff53-4e99-8e9b-d11f3aa3fb73.mp4

    opened by PrettyNneoma 1
  • [Feature Request]: Find a way to prevent package build errors on Google Dataflow

    [Feature Request]: Find a way to prevent package build errors on Google Dataflow

    Is your feature request related to a problem? Please describe.

    The package build using https://github.com/oppia/oppia/blob/develop/setup.py started failing on Google Dataflow after some commits that did not modify the build directly.

    We did not have psutil in requirements.in (we have it in requirements_dev.in) and setup.py calls common.py which calls servers.py which imports psutil. Locally, we could build the package as _requirements_dev.in_is installed but on Apache Beam, we only install requirements.in (this is correct behaviour as on prod, we only install requirements.in there). This only surfaced because #16073 introduced the import of servers.py into common.py.

    image

    Describe the solution you'd like

    The local package build should be isolated so that if there is a possible impro error like this in the future, it is surfaced locally before the PR introducing the change is merged.

    Describe alternatives you've considered

    No response

    Additional context

    No response

    bug Impact: High Work: Medium 
    opened by vojtechjelinek 0
Releases(v3.2.8)
  • v3.2.8(Sep 5, 2022)

    • New feature: Celebrating learners' accomplishments
    • Making the Contributor Dashboard UI Responsive
    • Improvements and bug fixes in the Learner/Creator page and contributors pages.
    Source code(tar.gz)
    Source code(zip)
  • v3.2.7(Aug 6, 2022)

  • v3.2.6(Jul 3, 2022)

  • v3.2.5(May 9, 2022)

  • v3.2.4(Mar 31, 2022)

    • Speed improvements in the contributor dashboard.
    • Allow filtering reviewable translation suggestions by topic.
    • UI Fixes to Learner/Creator page and contributors pages.
    • Library upgrades.
    Source code(tar.gz)
    Source code(zip)
  • v3.2.3(Feb 11, 2022)

    • UI Fixes to Learner/Creator page and contributors pages
    • New translations for classroom related pages
    • Library upgrades
    • New data handling jobs
    Source code(tar.gz)
    Source code(zip)
  • v3.2.2(Jan 8, 2022)

  • v3.2.1(Nov 28, 2021)

    • Many bug fixes and UI improvements.
    • Add Dutch, Slovak and Ukrainian site languages.
    • Add support for Azerbaijani to the contributor dashboard.
    • Allow filtering of translation opportunities by topic in the contributor dashboard.
    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Oct 30, 2021)

    • The whole codebase is now migrated to Python 3.
    • Introduces Apache Beam jobs infrastructure.
    • Introduces about foundation and volunteering pages.
    • Introduces types to Python files.
    • Introduces schema validation for many new handlers.
    • Many bug fixes and UI improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.1.4(Sep 2, 2021)

    • Introduces blog editor.
    • Introduces angular router.
    • Adds more frontend unit tests.
    • Consolidates RTE component image tags.
    • Introduces strict type checking in several TS files.
    • Many bug fixes and UI improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.1.3(Aug 11, 2021)

    • Introduces new blog-admin role with a new blog-admin page
    • Adds new translation and question admin role to use the new contributor-dashbaord-admin page
    • Introduces new voiceover admin role and allows voiceover admin to assign voice artist to explorations
    • Introduces Cookie banner informing users about the app's cookies usage
    • Migrated more files to Angular 8 and increased frontend coverage.
    • Many bug fixes and UI improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.1.2(Jul 12, 2021)

    • Lots of infrastructure changes related to python 3 and angular migrations
    • Improvements to developer UX
    • More supported languages for translations and voiceovers!
    • Improvements to the UI on library page, and other learner pages
    Source code(tar.gz)
    Source code(zip)
  • v3.1.1(Jun 11, 2021)

    • Allows linking exploration's state to a skill.
    • Presents site in RTL format for RTL languages.
    • Allows uploading GIFs with transparent background.
    • Many bug fixes and UI improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(May 20, 2021)

    • Migration to Firebase user accounts done (a major step for the Python 3 migration).
    • Migrated more files to Angular 8 and increased frontend coverage.
    • Regenerated missing exploration stats models (used to cause a lot of server errors).
    • Many bug fixes and UI improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.9(Mar 29, 2021)

  • v3.0.8(Feb 25, 2021)

  • v3.0.7(Feb 8, 2021)

    • New splash and teach pages
    • Lessons are now playable in any of the supported languages (once translated)
    • Lots of UI/UX fixes to the learner and creator pages
    • Python 3 and Angular migration changes
    Source code(tar.gz)
    Source code(zip)
  • v3.0.6(Jan 5, 2021)

    • Improvements to the contributor dashboard
    • Migrated more files to Angular 8 and increased frontend coverage.
    • Many bug fixes and UI improvements.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.5(Dec 3, 2020)

    • Introduced a new signup flow for stories
    • Improvements to the contributor dashboard
    • Wipeout & Takeout features were released
    • Migrated more files to Angular 8 and increased frontend coverage.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.4(Oct 26, 2020)

    • New rules for AlgebraicExpressionInput and MathEquationInput
    • Svg editor UI improvements
    • UI Upgrade for exploration editor and question editor.
    • Extend ExplorationImprovementsService to manage HBR/NGR tasks
    • Migrated more files to Angular 8 and increased frontend coverage.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.2(Sep 3, 2020)

    • Migrated more files to Angular 8 and increased frontend coverage.
    • More redesigns to the editor pages.
    • Three new math interactions available for creators.
    • Improved Chrome accessibility score for more pages.
    • SVG editor available in the RTE.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.1(Jul 25, 2020)

    • Add infrastructure for the improvements tab.
    • Improve scores in Chrome accessibility audits for some pages.
    • Migrate parts of the codebase to Angular 8 and add frontend tests to multiple files.
    • Fix multiple bugs in the new structure editors, and redesign the pages to look better on both Mobile and Desktop.
    Source code(tar.gz)
    Source code(zip)
  • v3.0.0(Jun 29, 2020)

    • Redesign story viewer, topic viewer and subtopic viewer
    • Introduce SortedTiles visualization for statistics
    • Introduce core.storage.improvements models
    • Upgrade more services to Angular
    Source code(tar.gz)
    Source code(zip)
  • v2.9.3(May 24, 2020)

    • Thumbnails for topic, subtopic, story, and chapters
    • Allow shuffle multiple-choice interaction's options
    • Migrated more services to Angular8
    • Many bug fixes and UI improvements.
    Source code(tar.gz)
    Source code(zip)
  • v2.9.2(Apr 21, 2020)

    • Enables community dashboard page
    • Makes Oppia more accessible on mobile
    • Increases coverage for frontend tests
    • More services migrated to Angular 8
    • Many bug fixes and UI improvements
    Source code(tar.gz)
    Source code(zip)
  • v2.9.1(Mar 30, 2020)

    • Fixes a recurring server error by regenerating statistics models
    • Adds frontend tests for some services
    • Adds audio duration to exploration schema
    • A lot of quality of life updates to learner and creator pages
    • Infrastructural changes, and directory restructures within the codebase.
    Source code(tar.gz)
    Source code(zip)
  • v2.9.0(Feb 22, 2020)

    • Adds the Malay language to the supported audio languages
    • Adds unit test for numerous frontend services
    • Upgrades Angular JS to version 1.7.9
    • Many bug fixes and UI improvements.
    Source code(tar.gz)
    Source code(zip)
  • v2.8.9(Feb 3, 2020)

    • Increased coverage for frontend tests
    • Added a new RTE element for concept cards
    • Migrated more services to Angular8
    • Started using Github Actions for various CI checks.
    Source code(tar.gz)
    Source code(zip)
  • v2.8.8(Dec 30, 2019)

  • v2.8.7(Nov 25, 2019)

CMS for everyone, easy to deploy and scale, robust modular system with many packages.

Django-Leonardo Full featured platform for fast and easy building extensible web applications. Don't waste your time searching stable solution for dai

97 Nov 17, 2022
🐰 Bunnybook 🐰 A tiny social network (for bunnies), built with FastAPI and React+RxJs.

🐰 Bunnybook 🐰 A tiny social network (for bunnies), built with FastAPI and React+RxJs. Click here for live demo! Included features: 💬 chat 🔴 online

Pietro Bassi 190 Jan 03, 2023
A full stack e-learning application, this is the backend using django restframework and docker.

DevsPrime API API Service backing client interfaces Technologies Python 3.9 : Base programming language for development Bash Scripting : Create conven

Nnabue Favour Chukwuemeka 1 Oct 21, 2021
Abilian Social Business Engine - an enterprise social networking / collaboration platform.

About Abilian SBE (Social Business Engine) is a platform for social business applications, and more specifically collaborative / enterprise 2.0 busine

Abilian open source projects 63 Dec 29, 2022
A Django-based CMS with a focus on extensibility and concise code

FeinCMS - An extensible Django-based CMS When was the last time, that a pre-built software package you wanted to use got many things right, but in the

FeinCMS 847 Jan 07, 2023
A website (webapp) to get food recipes by recipes names & ingredients.

Ramy's tedbira A website (aka: webapp) to get food recipes by recipes names & ingredients that you have in your fridge, using Django-framework and Spo

Rami Berrekia 15 Dec 23, 2022
Open Source CRM based on Django

Django-CRM Django CRM is opensource CRM developed on django framework. It has all the basic features of CRM to start with. We welcome code contributio

MicroPyramid 1.4k Dec 31, 2022
Backend routes and database for an abstract theoretical app that relates a database of courses, users, and assignments.

Backend routes and database for an abstract theoretical app that relates a database of courses, users, and assignments.

Sean Wiesner 0 Dec 27, 2021
Flask-SQLAlchemy implementation of nested/threaded comment replies.

Threaded comments using Common Table Expressions (CTE) for a MySQL Flask blog or CMS Credits to peterspython Also read more about the implementation h

ONDIEK ELIJAH OCHIENG 5 Nov 12, 2022
Django content management as it should be

Django content management as it should be. Documentation Read the full documentation or get a quick brief below. Install $ pip install djedi-cms Confi

5 Monkeys 75 Dec 13, 2022
LibreLingo🐢 🌎 📚 a community-owned language-learning platform

LibreLingo's mission is to create a modern language-learning platform that is owned by the community of its users. All software is licensed under AGPLv3, which guarantees the freedom to run, study, s

Daniel Kantor 1.4k Jan 09, 2023
Ella is a CMS based on Python web framework Django with a main focus on high-traffic news websites and Internet magazines.

Ella CMS Ella is opensource CMS based on Django framework, designed for flexibility. It is composed from several modules: Ella core is the main module

295 Oct 16, 2022
A modular, high performance, headless e-commerce platform built with Python, GraphQL, Django, and ReactJS.

Saleor Commerce Customer-centric e-commerce on a modern stack A headless, GraphQL-first e-commerce platform delivering ultra-fast, dynamic, personaliz

Mirumee Labs 17.8k Jan 07, 2023
The Plone CMS: root integration package

About Plone Plone is a mature, secure and user-friendly Content Management System (CMS). Plone - and the Open Source community behind it - aggregates

Plone Foundation 200 Jan 08, 2023
A self-hosted application that lets you create podcast RSS feeds from YouTube playlists

Playlist2Podcast A self-hosted application that lets you create podcast RSS feeds from YouTube playlists. What Does This Do? Takes a list of YouTube p

Simon 12 Nov 14, 2022
A Django content management system focused on flexibility and user experience

Wagtail is an open source content management system built on Django, with a strong community and commercial support. It's focused on user experience,

Wagtail 13.8k Jan 01, 2023
LOOKING FOR NEW MAINTAINER - Quokka is a Content Management System - `docker run --rm -it -p 5000:5000 quokka/quokka`

Quokka The Happiest CMS in the world Quokka is a Content Management Framework written in Python. A lightweight framework to build CMS (Content Managem

Quokka Project 2.2k Jan 01, 2023
Kotti is a high-level, Pythonic web application framework based on Pyramid and SQLAlchemy. It includes an extensible Content Management System called the Kotti CMS.

Kotti Kotti is a high-level, Pythonic web application framework based on Pyramid and SQLAlchemy. It includes an extensible Content Management System c

Kotti 394 Jan 07, 2023
Oppia a free, online learning platform to make quality education accessible for all.

Oppia is an online learning tool that enables anyone to easily create and share interactive activities (called 'explorations'). These activities simulate a one-on-one conversation with a tutor, makin

Oppia 4.8k Dec 28, 2022
A python open source CMS scanner that automates the process of detecting security flaws of the most popular CMSs

CMSmap CMSmap is a python open source CMS scanner that automates the process of detecting security flaws of the most popular CMSs. The main purpose of

RazzorBack 1 Oct 31, 2021