Advertisement
Hortt

invenias api

Jan 4th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.73 KB | None | 0 0
  1. from common.api.base import BinaryResponseHandler, StatusCodeErrorHandler
  2. from common.api.exceptions import NotAuthenticated
  3.  
  4. from ...providers.invenias import settings
  5. from ...providers.invenias.base import InveniasBaseDetailResource as BaseDetailResource
  6. from ...providers.invenias.base import InveniasBaseResource as BaseResource
  7. from ...providers.invenias.base import TokenHeaderMixin
  8.  
  9. RESOURCE_LIST = []
  10.  
  11.  
  12. def register(resource):
  13.     RESOURCE_LIST.append(resource)
  14.     return resource
  15.  
  16.  
  17. @register
  18. class Authentication(BaseResource):
  19.     """
  20.    Invenias uses OAuth 2.0 to authenticate users against their application(s).
  21.  
  22.    The authentication API is as follows: https://publicapi.invenias.com/token
  23.  
  24.    And the following data must be posted:
  25.  
  26.    POST:
  27.      - grant_type:  This will either be “password” or “refresh_token”
  28.      - username:    The username (email) used to log in to Invenias
  29.      - password:    The password for the associated username
  30.      - client_id:   The API Key for the application, generated within MyInvenias
  31.  
  32.    """
  33.     name = 'token'
  34.     call_name = 'auth'
  35.     version = None
  36.     allowed_methods = ['post']
  37.     max_retries = 3
  38.  
  39.     def request(self, method, headers=None, retry=0, *args, **data):
  40.         try:
  41.             return super(Authentication, self).request(method, headers=headers, *args, **data)
  42.         except NotAuthenticated as ex:
  43.             return self.retry_request(retry, ex, method, headers, *args, **data)
  44.  
  45.     def retry_request(self, retry, ex, method, headers, *args, **data):
  46.         self._validate_retry(ex, retry)
  47.         return self.request(method, headers, retry + 1, *args, **data)
  48.  
  49.     @classmethod
  50.     def _validate_retry(cls, ex, retry):
  51.         if retry > cls.max_retries:
  52.             raise ex
  53.  
  54.  
  55. @register
  56. class Advertisements(TokenHeaderMixin, BaseResource):
  57.     """
  58.    GET:
  59.        Returns a list of all Advertisement records.
  60.    POST:
  61.        Creates new Advertisement
  62.    """
  63.     name = 'Advertisements'
  64.     call_name = 'advertisements'
  65.     allowed_methods = ['get', 'post']
  66.  
  67.  
  68. @register
  69. class Advertisement(BaseDetailResource):
  70.     """
  71.    GET:
  72.        Returns an Advertisement record.
  73.    POST:
  74.        Creates new Advertisement
  75.    """
  76.     name = 'Advertisements({})'
  77.     call_name = 'advertisement'
  78.     detail_key = 'advertisement_id'
  79.     allowed_methods = ['patch', 'delete', 'get', 'post']
  80.  
  81.  
  82. @register
  83. class Categories(TokenHeaderMixin, BaseResource):
  84.     """
  85.    GET:
  86.        Returns a list of all Categories records.
  87.    POST:
  88.        Creates new Category
  89.    """
  90.     name = 'Categories'
  91.     call_name = 'categories'
  92.     allowed_methods = ['get', 'post']
  93.  
  94.  
  95. @register
  96. class Category(BaseDetailResource):
  97.     """
  98.    GET:
  99.        Returns a single Category record.
  100.    POST:
  101.        Creates new Category
  102.    """
  103.     name = 'Categories({})'
  104.     call_name = 'category'
  105.     detail_key = 'category_id'
  106.     allowed_methods = ['patch', 'delete', 'get', 'post']
  107.  
  108.  
  109. @register
  110. class People(TokenHeaderMixin, BaseResource):
  111.     """
  112.    GET:
  113.        Returns a list of all people records.
  114.    POST:
  115.        Creates new person
  116.    """
  117.     name = 'People'
  118.     call_name = 'people'
  119.     allowed_methods = ['get', 'post']
  120.  
  121.  
  122. @register
  123. class Person(BaseDetailResource):
  124.     """
  125.    PATCH:
  126.        Update or delete person
  127.    DELETE:
  128.        Deletes person
  129.    """
  130.     name = 'People({})'
  131.     detail_key = 'person_id'
  132.     call_name = 'person'
  133.     allowed_methods = ['patch', 'delete', 'get', 'post']
  134.  
  135.  
  136. @register
  137. class Position(BaseDetailResource):
  138.     """
  139.    GET:
  140.        list of permanent package for the position
  141.    """
  142.     name = 'Positions({})'
  143.     detail_key = 'position_id'
  144.     call_name = 'position'
  145.     allowed_methods = ['get']
  146.  
  147.  
  148. @register
  149. class PositionPermanentPackages(BaseDetailResource):
  150.     """
  151.    GET:
  152.        list of permanent package for the position
  153.    """
  154.     name = 'Positions({})/PermanentPackages'
  155.     detail_key = 'position_id'
  156.     call_name = 'position_permanent_packages'
  157.     allowed_methods = ['get']
  158.  
  159.  
  160. @register
  161. class PositionNonExecPackages(BaseDetailResource):
  162.     """
  163.    GET:
  164.        list of non exec package for the position
  165.    """
  166.     name = 'Positions({})/NonExecPackages'
  167.     detail_key = 'position_id'
  168.     call_name = 'position_non_exec_packages'
  169.     allowed_methods = ['get']
  170.  
  171.  
  172. @register
  173. class User(BaseDetailResource):
  174.     """
  175.    GET:
  176.        Returns user details
  177.    """
  178.     name = 'Users({})'
  179.     detail_key = 'user_id'
  180.     call_name = 'user'
  181.     allowed_methods = ['get']
  182.  
  183.  
  184. @register
  185. class SentCurriculumVitaes(TokenHeaderMixin, BaseResource):
  186.     """
  187.    GET:
  188.        Returns a list of all send cv actions.
  189.    POST:
  190.        Creates new CurriculumVitaes
  191.    """
  192.     name = 'SentCurriculumVitaes'
  193.     call_name = 'sent_curriculum_vitaes'
  194.     allowed_methods = ['get', 'post']
  195.  
  196.  
  197. @register
  198. class SentCurriculumVitaesPeople(BaseDetailResource):
  199.     """
  200.    PATCH:
  201.        Updates SentCurriculumVitaes action
  202.    """
  203.     name = 'SentCurriculumVitaes({})/People'
  204.     detail_key = 'sent_cv_id'
  205.     call_name = 'sent_curriculum_vitaes_people'
  206.  
  207.  
  208. @register
  209. class PersonDocuments(BaseDetailResource):
  210.     name = 'People({})/Documents'
  211.     detail_key = 'person_id'
  212.     call_name = 'person_documents'
  213.  
  214.     allowed_methods = ['get', 'post']
  215.  
  216.  
  217. @register
  218. class PersonCategories(BaseDetailResource):
  219.     name = 'People({})/Categories'
  220.     detail_key = 'person_id'
  221.     call_name = 'person_categories'
  222.  
  223.  
  224. @register
  225. class PersonEducation(BaseDetailResource):
  226.     name = 'People({})/Education'
  227.     detail_key = 'person_id'
  228.     call_name = 'person_education'
  229.  
  230.  
  231. @register
  232. class PersonPermanentPackages(BaseDetailResource):
  233.     name = 'People({})/PermanentPackages'
  234.     detail_key = 'person_id'
  235.     call_name = 'person_permanent_packages'
  236.  
  237.  
  238. @register
  239. class PersonNonExecPackages(BaseDetailResource):
  240.     name = 'People({})/NonExecPackages'
  241.     detail_key = 'person_id'
  242.     call_name = 'person_non_exec_packages'
  243.  
  244.  
  245. @register
  246. class PersonPositions(BaseDetailResource):
  247.     name = 'People({})/Positions'
  248.     detail_key = 'person_id'
  249.     call_name = 'person_positions'
  250.  
  251.  
  252. @register
  253. class PersonDefaultPosition(BaseDetailResource):
  254.     name = 'People({})/DefaultPosition'
  255.     detail_key = 'person_id'
  256.     call_name = 'person_default_position'
  257.  
  258.  
  259. @register
  260. class PositionCompany(BaseDetailResource):
  261.     name = 'Positions({})/Company'
  262.     detail_key = 'position_id'
  263.     call_name = 'position_company'
  264.  
  265.  
  266. @register
  267. class PersonSentCurriculumVitaes(BaseDetailResource):
  268.     name = 'People({})/SentCurriculumVitaes'
  269.     detail_key = 'person_id'
  270.     call_name = 'person_sent_cv'
  271.  
  272.  
  273. @register
  274. class Document(BaseDetailResource):
  275.     name = 'Documents({})'
  276.     detail_key = 'document_id'
  277.     call_name = 'document'
  278.     allowed_methods = ['get', 'post', 'delete']
  279.  
  280.  
  281. @register
  282. class Documents(TokenHeaderMixin, BaseResource):
  283.     name = 'Documents'
  284.     call_name = 'documents'
  285.     allowed_methods = ['get', 'post', 'delete']
  286.  
  287.  
  288. @register
  289. class DocumentVersions(TokenHeaderMixin, BaseResource):
  290.     name = 'DocumentVersions'
  291.     call_name = 'document_versions'
  292.  
  293.  
  294. @register
  295. class DocumentFile(BaseDetailResource):
  296.     name = 'binaryFiles({})'
  297.     detail_key = 'version_id'
  298.     call_name = 'binary_document'
  299.  
  300.     response_handler = BinaryResponseHandler
  301.     error_handler = StatusCodeErrorHandler
  302.  
  303.     allowed_methods = ['get', 'post']
  304.  
  305.  
  306. @register
  307. class CurriculumVitaesUpdate(BaseDetailResource):
  308.     """
  309.    PATCH:
  310.        Updates SentCurriculumVitaes action
  311.    """
  312.     name = 'SentCurriculumVitaes({})'
  313.     detail_key = 'action_id'
  314.     call_name = 'curriculum_vitaes_update'
  315.     allowed_methods = ['patch']
  316.  
  317.  
  318. @register
  319. class CurriculumVitaesRemove(BaseDetailResource):
  320.     """
  321.    DELETE:
  322.        Deletes SentCurriculumVitaes
  323.    """
  324.     name = 'SentCurriculumVitaes({})'
  325.     detail_key = 'curriculum_vitae_id'
  326.     call_name = 'curriculum_vitaes_remove'
  327.     allowed_methods = ['delete']
  328.  
  329.  
  330. @register
  331. class LookupListEntries(TokenHeaderMixin, BaseResource):
  332.     """
  333.    GET:
  334.        Returns a list of all LookupListEntries
  335.    POST:
  336.        Created new lookup entry
  337.    """
  338.     name = 'LookupListEntries'
  339.     call_name = 'lookup_list_entries'
  340.     allowed_methods = ['get', 'post']
  341.  
  342.  
  343. @register
  344. class LookupLists(TokenHeaderMixin, BaseResource):
  345.     name = 'LookupLists'
  346.     call_name = 'lookup_list'
  347.     allowed_methods = ['get']
  348.  
  349.  
  350. @register
  351. class LookupEntry(BaseDetailResource):
  352.     """
  353.    GET:
  354.        Returns lookup entry
  355.    """
  356.     name = 'LookupListEntries({})'
  357.     detail_key = 'entry_id'
  358.     call_name = 'lookup_entry'
  359.  
  360.  
  361. @register
  362. class NoteFields(TokenHeaderMixin, BaseResource):
  363.     name = 'NoteFields'
  364.     call_name = 'notes'
  365.     allowed_methods = ['get']
  366.  
  367.  
  368. @register
  369. class Note(BaseDetailResource):
  370.     name = 'NoteFields({})'
  371.     detail_key = 'note_id'
  372.     call_name = 'note'
  373.  
  374.  
  375. @register
  376. class Categories(TokenHeaderMixin, BaseResource):
  377.     name = 'CategoryLists'
  378.     call_name = 'categories'
  379.     allowed_methods = ['get']
  380.  
  381.  
  382. @register
  383. class CategoriesEntries(TokenHeaderMixin, BaseResource):
  384.     name = 'CategoryListEntries'
  385.     call_name = 'category_lists_entries'
  386.     allowed_methods = ['get', 'post']
  387.  
  388.  
  389. @register
  390. class CategoryListEntries(BaseDetailResource):
  391.     name = 'CategoryListEntries({})'
  392.     detail_key = 'category_list_entries_id'
  393.     call_name = 'category_list_entry'
  394.     allowed_methods = ['get', 'delete', 'patch']
  395.  
  396.  
  397. @register
  398. class CategoryList(BaseDetailResource):
  399.     name = 'CategoryLists({})'
  400.     detail_key = 'category_list_id'
  401.     call_name = 'category_list'
  402.  
  403.  
  404. @register
  405. class Programme(BaseDetailResource):
  406.     name = 'Programmes({})'
  407.     detail_key = 'programme_id'
  408.     call_name = 'programme'
  409.     allowed_methods = ['get', 'post']
  410.  
  411.  
  412. @register
  413. class ProgrammePerson(BaseDetailResource):
  414.     name = 'ProgrammeToPersonRelations({})'
  415.     detail_key = 'relation_id'
  416.     call_name = 'programme_person'
  417.     allowed_methods = ['get', 'post', 'delete']
  418.  
  419.  
  420. @register
  421. class ProgrammesList(TokenHeaderMixin, BaseResource):
  422.     name = 'Programmes'
  423.     call_name = 'programmes_list'
  424.     allowed_methods = ['get', 'post']
  425.  
  426.  
  427. @register
  428. class Assignment(BaseDetailResource):
  429.     name = 'Assignments({})'
  430.     detail_key = 'assignment_id'
  431.     call_name = 'assignment'
  432.     allowed_methods = ['get', 'post']
  433.  
  434.  
  435. @register
  436. class Assignments(TokenHeaderMixin, BaseResource):
  437.     name = 'Assignments'
  438.     call_name = 'assignments'
  439.     allowed_methods = ['get', 'post']
  440.  
  441.  
  442. @register
  443. class Currency(BaseDetailResource):
  444.     name = 'Currencies({})'
  445.     detail_key = 'currency_id'
  446.     call_name = 'currency'
  447.  
  448.  
  449. @register
  450. class PermanentPackageField(BaseDetailResource):
  451.     name = 'PermanentPackageFields({})'
  452.     detail_key = 'field_id'
  453.     call_name = 'permanent_package_field'
  454.  
  455.  
  456. @register
  457. class NonExecPackageField(BaseDetailResource):
  458.     name = 'NonExecPackageFields({})'
  459.     detail_key = 'field_id'
  460.     call_name = 'non_exec_package_field'
  461.  
  462.  
  463. @register
  464. class Placements(TokenHeaderMixin, BaseResource):
  465.     name = 'Placements'
  466.     call_name = 'placements'
  467.  
  468.  
  469. @register
  470. class Placement(BaseDetailResource):
  471.     name = 'Placements({})'
  472.     call_name = 'placement'
  473.     detail_key = 'placement_id'
  474.  
  475.  
  476. class Invenias:
  477.     """
  478.    Controls API Resources,
  479.    creates token storage and instance of each resource with the token storage
  480.    @DynamicAttrs
  481.    """
  482.  
  483.     def __init__(self, username=None, password=None, client_id=None):
  484.         token_storage = settings.TOKEN_STORAGE_CLASS(username=username, password=password, client_id=client_id)
  485.         for api_view in RESOURCE_LIST:
  486.             setattr(self, api_view.call_name, api_view(token_storage=token_storage))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement